一、动态顺序g表概念
在静态顺序表的基础上添加一个判断有效元素是否等于最大容量的函数,并且当有效元素等于最大容量时对最大容量进行扩容。
二、代码展示
1、头文件
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
2、顺序表的声明
#define initsize 2 //最大容量大小
typedef struct Sqlist
{
int *data;
int size;
int capacity;//最大容量变量名
};
3、函数代码
//初始化
void initlist(Sqlist* sqlist)
{
assert(NULL!=sqlist);
sqlist->data = (int*)calloc(initsize,sizeof(int)*initsize);//2
sqlist->size=0;
sqlist->capacity=initsize;
}
//判满,增加
void CheckCapacity(Sqlist*sqlist)
{
assert(NULL!=sqlist);
if(sqlist->size==sqlist->capacity)
{
//方法一
int* newspace = (int*)realloc(sqlist->data,sizeof(int)*sqlist->capacity*2);
//方法二
/*int *newspace = (int*)calloc(sqlist->capacity*2,sizeof(int)*sqlist->capacity*2);
for(int i=1;i<=sqlist->capacity;i++)
{
newspace[i]=sqlist->data[i];
}
free(sqlist->data);*/
sqlist->data=newspace;
sqlist->capacity=sqlist->capacity*2;
}
}
//头插
void Ainsert(Sqlist*sqlist,int value)
{
assert(NULL!=sqlist);
CheckCapacity(sqlist);
if(sqlist->size==0)
{
sqlist->size++;
sqlist->data[0]=value;
}
else
{
for(int i=sqlist->size-1;i>=0;i--)
{
sqlist->data[i+1]=sqlist->data[i];
}
sqlist->data[0]=value;
sqlist->size++;
}
}
//逆置
void back(Sqlist*sqlist)
{
assert(NULL!=sqlist);
int start=0;
int end=sqlist->size-1;
for(int i=0;i<sqlist->size/2;i++)
{
int emp;
emp=sqlist->data[start];
sqlist->data[start]=sqlist->data[end];
sqlist->data[end]=emp;
start++;
end--;
}
}
//打印
void myprint(Sqlist*sqlist)
{
assert(NULL!=sqlist);
printf("data=");
for(int i=0;i<sqlist->size;i++)
{
printf("%d",sqlist->data[i]);
}
printf("\n");
}
三、主函数
int main()
{
Sqlist sqlist;
initlist(&sqlist);
Ainsert(&sqlist,1);
Ainsert(&sqlist,2);
Ainsert(&sqlist,3);
Ainsert(&sqlist,4);
Ainsert(&sqlist,5);
Ainsert(&sqlist,6);
myprint(&sqlist);
back(&sqlist);
myprint(&sqlist);
}
这里只写了头插法和打印函数,其他的和静态顺序表相同这里就不做说明。
四、运行结果