做盒饭的网站,网站内容建设出现的问题,有哪些平台免费做推广,一个空间怎么放多个网站数据结构——顺序表的实现 一 关于顺序表的简单知识二 动态顺序表 一 关于顺序表的简单知识
1.顺序表的底层结构是数组#xff0c;在数组的基础上增加了增#xff0c;删#xff0c;查#xff0c;改等方法。 2.顺序表的分类#xff1a;静态顺序表和动态顺序表 静态顺序表的… 数据结构——顺序表的实现 一 关于顺序表的简单知识二 动态顺序表 一 关于顺序表的简单知识
1.顺序表的底层结构是数组在数组的基础上增加了增删查改等方法。 2.顺序表的分类静态顺序表和动态顺序表 静态顺序表的缺陷给小了空间不够给大了造成空间浪费。 动态顺序表可以实现动态增容成倍数的增加一般成二倍的形式增加 3.顺序表是线性表的一种在物理结构和逻辑结构上都是线性的。
二 动态顺序表
由于静态顺序表的不灵活性所以一般使用动态顺序表接下来我主要给大家讲解动态顺序表。 但是在此之前我还是把静态顺序表给大家讲清楚。
#define N 100;//添加宏定义可以更容易的更改底层数组大小
struct SeqList
{int arr[N];//静态顺序表底层结构是一个固定大小的数组由此造成了它的不灵活性int size;//有效数据长度}
接下来就是动态顺序表了。
动态顺序表的头文件
#includestdio.h
#includestdlib.h
#includestdio.h
#includeassert.h
//定义顺序表
typedef int SLDateList;
typedef struct SeqList
{SLDateList* arr;//由于动态顺序表不知道数组的大小所以使用指针。int size;int capacity;}SL;//初始化
void SLInit(SL* ps);//销毁
void SLDestory(SL* ps);//尾插
void SLPushBack(SL* ps, SLDateList x);
//头插
void SLPushFront(SL* ps, SLDateList x);
//尾删
void SLPopBack(SL* ps);
//头删
void SLPopFront(SL* ps);
//打印
void SLPrint(SL ps);
//查找
int SLFind(SL* ps, SLDateList x);
//在指定位置插入数据
void SLInit(SL* ps, SLDateList pos, SLDateList x);
//在指定位置删除数据
void SLErase(SL* ps, SLDateList pos);动态顺序表的源文件
#includeSE.hvoid SLInit(SL * ps)
{ps-arr NULL;ps- size ps- capacity 0;}
//头插尾插都要判断顺序表是否为空
void SLCheckCapacity(SL* ps)
{if (ps-capacity ps-size){int newcapacity ps-capacity 0 ? 4 : ps-capacity * 2;//注意是相等不是赋值SLDateList* tmp (SLDateList*)realloc(ps-arr, newcapacity * sizeof(SLDateList));if (tmp NULL){perror(realloc file!);exit(1);}ps-arr tmp;ps-capacity newcapacity;}
}void SLPushBack(SL* ps, SLDateList x)
{assert(ps);//顺序表不能传空SLCheckCapacity(ps);ps-arr[ps-size] x;}void SLPushFront(SL* ps, SLDateList x)
{assert(ps);SLCheckCapacity(ps);for (int i ps-size; i 0; i--){ps-arr[i] ps-arr[i-1];}ps-arr[0] x;ps-size;}void SLPopBack(SL* ps)
{assert(ps);assert(ps-size);--ps-size;
}void SLPopFront(SL* ps)
{assert(ps);assert(ps-size);for (int i ps-size; ips-size-1; i--){ps-arr[i] ps-arr[i 1];}ps-size--;}void SLPrint(SL ps)
{for (int i 0; i ps.size; i){printf(%d,ps.arr[i]);}printf(\n);
}int SLFind(SL* ps, SLDateList x)
{assert(ps);for (int i 0; i ps-size; i){if (ps-arr[i] x){return i;}elsereturn -1;}
}
void SLInit(SL* ps, SLDateList pos, SLDateList x)
{assert(ps);assert(pos0 posps-size);SLCheckCapacity(ps);for (int i ps-size; i pos; i--){ps-arr[i] ps-arr[i - 1];}ps-arr[pos] x;ps-size;}
void SLErase(SL* ps, SLDateList pos)
{assert(ps);assert(pos 0 pos ps-size);SLCheckCapacity(ps);for (int i pos ; ips-size-1; i){ps-arr[i - 1] ps-arr[i];//size-2 size-1}ps-size--;
}void SLDestory(SL* ps)
{if (ps-arr)//销毁谁销毁的是已经申请过空间的数组{free(ps-arr);}ps-arr NULL;ps-size ps-capacity 0;}