最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實(shí)現(xiàn)靜態(tài)順序表的實(shí)例詳解

 更新時(shí)間:2017年08月11日 09:00:39   作者:SuLiJuan66  
這篇文章主要介紹了C語言實(shí)現(xiàn)靜態(tài)順序表的實(shí)例詳解的相關(guān)資料,這里提供是幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下

C語言實(shí)現(xiàn)靜態(tài)順序表的實(shí)例詳解

線性表

定義一張順序表也就是在內(nèi)存中開辟一段連續(xù)的存儲(chǔ)空間,并給它一個(gè)名字進(jìn)行標(biāo)識(shí)。只有定義了一個(gè)順序表,才能利用該順序表存放數(shù)據(jù)元素,也才能對(duì)該順序表進(jìn)行各種操作。

接下來看看靜態(tài)的順序表,直接上代碼:

SeqList.h

#define _CRT_SECURE_NO_WARNINGS 1

#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

#define MAX 10

typedef int DataType;

typedef struct SeqList
{
 DataType data[MAX];
 int sz;
}SeqList,*pSeqList;

void InitSeqList(pSeqList ps);
void PushBack(pSeqList ps, DataType d);
void PopBack(pSeqList ps);
void PushFront(pSeqList ps, DataType d);
void PopFront(pSeqList ps);
void Display(const pSeqList ps);
int Find(pSeqList ps, DataType d);
void Insert(pSeqList ps, DataType d, int pos);
void Remove(pSeqList ps, DataType d);
void RemoveAll(pSeqList ps, DataType d);
void Reverse(pSeqList ps);
void Sort(pSeqList ps);
int BinarySearch(pSeqList ps, DataType d);

#endif//__SEQLIST_H__

SeqList.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "SeqList.h"

void InitSeqList(pSeqList ps)
{
 assert(ps);
 ps->sz = 0;
 memset(ps->data, 0, sizeof(DataType)*MAX);
}
void PushBack(pSeqList ps, DataType d)
{
 assert(ps);
 if (ps->sz == MAX)
 {
  return;
 }
 ps->data[ps->sz] = d;
 ps->sz++;
}
void PopBack(pSeqList ps)
{
 assert(ps);
 if (ps->sz == 0)
 {
  return;
 }
 ps->sz--;
}
void PushFront(pSeqList ps, DataType d)
{
 int i = 0;
 assert(ps);
 for (i = ps->sz; i >= 1; i--)
 {
  ps->data[i] = ps->data[i - 1];
 }
 ps->data[0] = d;
 ps->sz++;
}
void PopFront(pSeqList ps)
{
 int i = 0;
 assert(ps);
 for (i = 0; i < ps->sz; i++)
 {
  ps->data[i] = ps->data[i + 1];
 }
 ps->sz--;
}
void Display(const pSeqList ps)
{
 int i = 0;
 assert(ps);
 for (i = 0; i < ps->sz; i++)
 {
  printf("%d ", ps->data[i]);
 }
 printf("\n");
}
int Find(pSeqList ps, DataType d)
{
 int i = 0;
 assert(ps);
 for (i = 0; i < ps->sz; i++)
 {
  if (ps->data[i] == d)
  {
   return i;
  }
 }
 return -1;
}
void Insert(pSeqList ps, DataType d, int pos)
{
 int i = 0;
 assert(ps);
 if (ps->sz == MAX)
 {
  return;
 }
 //方式一
 //for (i = ps->sz - 1; i >= pos; i--)
 //{
 // ps->data[i + 1] = ps->data[i];
 //}
 //方式二
 memmove(ps->data + pos + 1, ps->data + pos, sizeof(DataType)*(ps->sz - pos));
 ps->data[pos] = d;
 ps->sz++;
}
void Remove(pSeqList ps, DataType d)
{
 int i = 0;
 int pos = 0;
 assert(ps);
 pos = Find(ps, d);
 if (pos != -1)
 {
  for (i = pos; i < ps->sz; i++)
  {
   ps->data[i] = ps->data[i + 1];
  }
  ps->sz--;
 }
}
void RemoveAll(pSeqList ps, DataType d)
{
 int i = 0;
 int pos = 0;
 assert(ps);
 pos = Find(ps, d);
 while ((pos = Find(ps, d)) != -1)
 {
  for (i = pos; i < ps->sz; i++)
  {
   ps->data[i] = ps->data[i + 1];
  }
  ps->sz--;
 }
}
void Reverse(pSeqList ps)
{
 int left = 0;
 int right = ps->sz - 1;
 assert(ps);
 while (left < right)
 {
  DataType tmp = ps->data[right];
  ps->data[right] = ps->data[left];
  ps->data[left] = tmp;
  left++;
  right--;
 }
}
void Sort(pSeqList ps)
{
 int i = 0;
 int j = 0;
 assert(ps);
 for (i = 0; i < ps->sz; i++)
 {
  for (j = 0; j < ps->sz - i - 1; j++)
  {
   if (ps->data[j]>ps->data[j + 1])
   {
    DataType tmp = ps->data[j];
    ps->data[j] = ps->data[j + 1];
    ps->data[j + 1] = tmp;
   }
  }
 }
}
int BinarySearch(pSeqList ps, DataType d)
{
 int left = 0;
 int right = ps->sz - 1;
 while (left <= right)
 {
  int mid = left - ((left - right) >> 1);
  if (d > ps->data[mid])
  {
   left = mid + 1;
  }
  else if (d < ps->data[mid])
  {
   right = mid - 1;
  }
  else
  {
   return mid;
  }
 }
 return -1;
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqList.h"

void test1()
{
 SeqList list;
 InitSeqList(&list);
 PushBack(&list, 1);
 PushBack(&list, 2);
 PushBack(&list, 3);
 PushBack(&list, 4);
 Display(&list);
 PopBack(&list);
 Display(&list);
 PopBack(&list);
 Display(&list);
 PopBack(&list);
 Display(&list);
 PopBack(&list);
 Display(&list);
}

void test2()
{
 int pos = 0;
 SeqList list;
 InitSeqList(&list);
 PushFront(&list, 1);
 PushFront(&list, 2);
 PushFront(&list, 3);
 PushFront(&list, 2);
 PushFront(&list, 4);
 PushFront(&list, 2);
 Display(&list);
 pos = Find(&list, 3);
 printf("%d\n", list.data[pos]);
 PopFront(&list);
 Display(&list);
 PopFront(&list);
 Display(&list);
 PopFront(&list);
 Display(&list);
 PopFront(&list);
 Display(&list);
}
void test3()
{
 int pos = 0;
 SeqList list;
 InitSeqList(&list);
 PushFront(&list, 1);
 PushFront(&list, 2);
 PushFront(&list, 3);
 PushFront(&list, 2);
 PushFront(&list, 4);
 PushFront(&list, 2);
 Display(&list);
 Insert(&list, 6, 2);
 Display(&list);
 Remove(&list, 1);
 Display(&list);
 RemoveAll(&list, 2);
 Display(&list);
}
void test4()
{
 int pos = 0;
 SeqList list;
 InitSeqList(&list);
 PushFront(&list, 1);
 PushFront(&list, 2);
 PushFront(&list, 3);
 PushFront(&list, 2);
 PushFront(&list, 4);
 Display(&list);
 Reverse(&list);
 Display(&list);
 Sort(&list);
 Display(&list);
 pos = BinarySearch(&list, 3);
 printf("%d\n", list.data[pos]);
}
int main()
{
 test4();
 system("pause");
 return 0;
}

動(dòng)態(tài)順序表的實(shí)現(xiàn):http://m.fzitv.net/article/120876.htm

 以上使用C語言動(dòng)態(tài)順序表的實(shí)現(xiàn)如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C語言中指針和數(shù)組試題詳解分析

    C語言中指針和數(shù)組試題詳解分析

    變量存放在內(nèi)存中,內(nèi)存其實(shí)就是一組有序字節(jié)組成的數(shù)組,每個(gè)字節(jié)有唯一的內(nèi)存地址。CPU 通過內(nèi)存尋址對(duì)存儲(chǔ)在內(nèi)存中的某個(gè)指定數(shù)據(jù)對(duì)象的地址進(jìn)行定位。數(shù)據(jù)對(duì)象是指存儲(chǔ)在內(nèi)存中的一個(gè)指定數(shù)據(jù)類型的數(shù)值或字符串,它們都有一個(gè)自己的地址,指針是保存這個(gè)地址的變量
    2021-10-10
  • C語言結(jié)構(gòu)體版學(xué)生成績管理系統(tǒng)

    C語言結(jié)構(gòu)體版學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言結(jié)構(gòu)體版的學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • opencv3/C++ 將圖片轉(zhuǎn)換為視頻的實(shí)例

    opencv3/C++ 將圖片轉(zhuǎn)換為視頻的實(shí)例

    今天小編就為大家分享一篇opencv3/C++ 將圖片轉(zhuǎn)換為視頻的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++連接數(shù)據(jù)庫SqlServer、MySql、Oracle、Access、SQLite、PostgreSQL、MongoDB、Redis

    C++連接數(shù)據(jù)庫SqlServer、MySql、Oracle、Access、SQLite、PostgreSQL、Mong

    C++是一種通用的編程語言,可以使用不同的庫和驅(qū)動(dòng)程序來連接各種數(shù)據(jù)庫,以下是一些示例代碼,演示如何使用?C++?連接?SQL?Server、MySQL、Oracle、ACCESS、SQLite?、?PostgreSQL、MongoDB、Redis數(shù)據(jù)庫
    2024-08-08
  • swift Character類型詳解及實(shí)例

    swift Character類型詳解及實(shí)例

    這篇文章主要介紹了 swift Character類型詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 一文詳解Qt中線程的實(shí)際應(yīng)用

    一文詳解Qt中線程的實(shí)際應(yīng)用

    為了讓程序盡快響應(yīng)用戶操作,在開發(fā)應(yīng)用程序時(shí)經(jīng)常會(huì)使用到線程。這篇文章就來和大家介紹一下Qt中線程的實(shí)際應(yīng)用,感興趣的小伙伴可以了解一下
    2023-03-03
  • C/C++利用棧和隊(duì)列實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)

    C/C++利用棧和隊(duì)列實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì)一般都不是很好理解,今天小編為大家總結(jié)了一下c和c++版本的常見棧和隊(duì)列的的停車場(chǎng)管理程序,需要的小伙伴可以參考一下
    2022-06-06
  • C++讀寫.mat文件的方法

    C++讀寫.mat文件的方法

    本文介紹了“C++讀寫.mat文件的方法”,需要的朋友可以參考一下
    2013-03-03
  • 哈夫曼算法構(gòu)造代碼

    哈夫曼算法構(gòu)造代碼

    這篇文章主要介紹了哈夫曼算法構(gòu)造代碼,有需要的朋友可以參考一下
    2013-12-12
  • 初識(shí)C++的const關(guān)鍵字,常量與常變量

    初識(shí)C++的const關(guān)鍵字,常量與常變量

    這篇文章主要為大家詳細(xì)介紹了C++的const關(guān)鍵字,常量與常變量,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評(píng)論

崇州市| 墨玉县| 和田县| 平安县| 化隆| 宁乡县| 鲁甸县| 黄骅市| 翁源县| 东城区| 牡丹江市| 丁青县| 拉萨市| 晋城| 中山市| 仁怀市| 白朗县| 儋州市| 乐山市| 大丰市| 辽阳市| 大兴区| 富顺县| 龙井市| 隆德县| 灵川县| 海安县| 萨嘎县| 萍乡市| 苗栗县| 武冈市| 寿阳县| 永川市| 东乡县| 宁晋县| 安陆市| 五家渠市| 昌乐县| 施甸县| 太仓市| 筠连县|