一、動態順序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);
}
這裏只寫了頭插法和打印函數,其他的和靜態順序表相同這裏就不做說明。
四、運行結果