国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言實現動態順序表的實現代碼

2020-01-26 13:58:23
字體:
來源:轉載
供稿:網友

C語言實現動態順序表的實現代碼

順序表是在計算機內存中以數組的形式保存的線性表,是指用一組地址連續的存儲單元依次存儲數據元素的線性結構。線性表采用順序存儲的方式存儲就稱之為順序表。順序表是將表中的結點依次存放在計算機內存中一組地址連續的存儲單元中。

靜態實現:結構體內部只需兩個成員,其中一個為固定大小(MAX)的數組,用來存放我們的數據。數組大小我們可以通過在頭文件中改變MAX的值來改變。

動態實現:在內存中開辟一塊空間,可以隨我們數據數量的增多來擴容。

來看看動態的順序表實現:

1.seqlist.h

#define _CRT_SECURE_NO_WARNINGS 1  #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>  typedef int DataType;  #define DEFAULT_SZ 3 #define INC_SZ 2  typedef struct SeqList {  DataType *data;  int sz;  int capacity; }SeqList,*pSeqList;  void InitSeqList(pSeqList pList); void PushBack(pSeqList pList,DataType d); void PopBack(pSeqList pList); void PushFront(pSeqList pList, DataType d); void PopFront(pSeqList pList); int Find(pSeqList pList, DataType d); void Remove(pSeqList pList, DataType d); void RemoveAll(pSeqList pList, DataType d); void BubbleSort(pSeqList pList); int BinarySearch(pSeqList pList, DataType d); void PrintfSeqList(pSeqList pList); void Insert(pSeqList pList, int pos, DataType d); void ReverseList(pSeqList pList); void DestroySeqList(pSeqList pList);     #endif//__SEQLIST_H__ 

2.seqlist.c

#define _CRT_SECURE_NO_WARNINGS 1  #include "seqlist.h"  void InitSeqList(pSeqList pList) {  pList->sz = 0;  pList->data = (DataType*)malloc(sizeof(DataType)*DEFAULT_SZ);  if (pList->data == NULL)  {   perror("malloc");   return;  }  memset(pList->data, 0, sizeof(DataType)*DEFAULT_SZ); } void CheckCapacity(pSeqList pList) {  assert(pList);  if (pList->sz == pList->capacity)  {   DataType*ret = (DataType*)realloc(pList->data, sizeof(DataType)*(pList->capacity + INC_SZ));   if (ret == NULL)   {    perror("realloc");   }   pList->data = ret;   pList->capacity += INC_SZ;   } } void PushBack(pSeqList pList, DataType d) {  assert(pList);  if (pList->sz == pList->capacity)  {   CheckCapacity(pList);  }  pList->data[pList->sz] = d;  pList->sz++; } void PopBack(pSeqList pList) {  int i = 0;  assert(pList);  if (pList->sz == 0)  {   printf("順序表為空:<");   return;  }  pList->sz--; } void PushFront(pSeqList pList, DataType d) {  int i = 0;  assert(pList);  if (pList->sz == pList->capacity)  {   CheckCapacity(pList);  }  for (i = pList->sz; i >= 1; i--)  {   pList->data[i] = pList->data[i - 1];  }  pList->data[0] = d;  pList->sz++; } void PopFront(pSeqList pList) {  int i = 0;  assert(pList);  for (i = 0; i < pList->sz; i++)  {   pList->data[i] = pList->data[i + 1];  }  pList->sz--; } int Find(pSeqList pList, DataType d) {  int i = 0;  assert(pList);  while (i < pList->sz)  {   if (pList->data[i] == d)   {    return i;   }   else   {    i++;   }  }  return -1; } void Remove(pSeqList pList, DataType d) {  int i = 0;  int pos = 0;  assert(pList);  while (pList->data[pos=Find(pList,d)]==d)  {   for (i = pos; i < pList->sz-1; i++)   {    pList->data[i] = pList->data[i + 1];   }   pList->sz--;  } } void RemoveAll(pSeqList pList, DataType d) {  int i = 0;  int pos = 0;  assert(pList);  while ((pos = Find(pList, d)) != -1)  {   for (i = pos; i < pList->sz - 1; i++)   {    pList->data[i] = pList->data[i + 1];   }   pList->sz--;  } } void BubbleSort(pSeqList pList) {  int i = 0;  assert(pList);  for (i = 0; i < pList->sz - 1; i++)  {   int j = 0;   for (j = 0; j < pList->sz - i - 1; j++)   {    if (pList->data[j]>pList->data[j + 1])    {     DataType tmp = pList->data[j];     pList->data[j] = pList->data[j + 1];     pList->data[j + 1] = tmp;    }   }  } } int BinarySearch(pSeqList pList, DataType d) {  int left = 0;  int right = pList->sz - 1;  assert(pList);  while (left <= right)  {   int mid = left - ((left - right) >> 1);   if (d > pList->data[mid])   {    left = mid + 1;   }   else if (d < pList->data[mid])   {    right = mid - 1;   }   else    return mid;  }  return -1; } void PrintfSeqList(pSeqList pList) {  int i = 0;  for (i = 0; i < pList->sz; i++)  {   printf("%d ", pList->data[i]);  } } void Insert(pSeqList pList, int pos, DataType d) {  int i = 0;  if (pList->sz == pList->capacity)  {   CheckCapacity(pList);  }  for (i = pList->sz - 1; i >= pos; i--)  {   pList->data[i + 1] = pList->data[i];  }  pList->data[pos] = d;  pList->sz++; } void ReverseList(pSeqList pList) {  int left = 0;  int right = pList->sz - 1;  assert(pList);  while (left < right)  {   DataType tmp = pList->data[left];   pList->data[left] = pList->data[right];   pList->data[right] = tmp;   left++;   right--;  } } void DestroySeqList(pSeqList pList) {  free(pList->data);  pList->data = NULL; } 

3.test.c

#define _CRT_SECURE_NO_WARNINGS 1 #include "seqlist.h"  //void Test() //{ // SeqList *List; // InitSeqList(&List); // PushBack(&List, 1); // PushBack(&List, 2); // PushBack(&List, 3); // PushBack(&List, 4); // PushBack(&List, 5); // PopBack(&List); // printf("%d ", Find(&List, 2)); // PrintfSeqList(&List); //}  void Test2() {  SeqList List;  InitSeqList(&List);  PushBack(&List, 1);  PushBack(&List, 2);  PushBack(&List, 3);  PushBack(&List, 4);  PushBack(&List, 5);  PushFront(&List, 5);  PushFront(&List, 2);  PushFront(&List, 3);  //PopFront(&List);  RemoveAll(&List, 5);  //BubbleSort(&List);  //BinarySearch(&List, 3);  PrintfSeqList(&List); } int main() {  Test2();  system("pause/n");  return 0; } 

靜態順序表的實現://m.survivalescaperooms.com/article/120875.htm

以上就是動態實現順序表的實例,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 南华县| 合川市| 云霄县| 西昌市| 夏邑县| 莎车县| 卢湾区| 汨罗市| 永嘉县| 隆昌县| 石首市| 米泉市| 思茅市| 丹江口市| 晴隆县| 永善县| 南川市| 拜泉县| 原阳县| 历史| 田东县| 汉阴县| 兴城市| 海口市| 米泉市| 孝义市| 三门县| 通许县| 汝城县| 东安县| 樟树市| 泰来县| 闵行区| 绥棱县| 芷江| 云梦县| 黄龙县| 义乌市| 南平市| 迭部县| 南木林县|