/**
 *用顺序存储结构实现的链表
 */
#include <stdio.h>
#include <stdlib.h>
 
/*链表初始化容量*/
#define initSize 50
 
/*表示链表的结构体*/
struct SqList
{
/*指向数据存储区域的指针*/
int *pdata;
/*当前链表的长度*/
int lenth;
/*当前链表的存储容量*/
int contain;
}list,*plist;
 
 
/*初始化链表*/
void initSqList(SqList *list);
/*链表的插入操作*/
void insert(SqList *list,int data);
/*链表的删除操作*/
void delet(SqList *list,int position);
/*获取链表指定位置的元素*/
int get(SqList *list,int position);
/*重新设置链表的容量*/
void resize(SqList *list);
 
int main()
{
 
 
plist = &list;
/*初始链表*/
initSqList(plist);
int i,j;
for(i=1;i<=40;i++)
{
insert(plist,i);
}
for(j=1;j<=list.lenth;j++)
{
printf("%d\n",get(plist,j));
}
printf("删除之后。\n");
delet(plist,5);
delet(plist,5);
delet(plist,5);
for(j=1;j<=list.lenth;j++)
{
printf("%d\n",get(plist,j));
}
getchar();
return 0;
}
 
 
/*初始化链表*/
void initSqList(SqList *list)
{
list->lenth = 0;
list->contain = initSize;
list->pdata = (int*)calloc(initSize,sizeof(int));
}
/*链表的插入操作*/
void insert(SqList *list,int data)
{
/*检查是否超出了容量*/
if(list->lenth >= list->contain)
{
resize(list);
}
/*插入*/
*((list->pdata)+list->lenth) = data;
++(list->lenth);
}
/*链表的删除操作*/
void delet(SqList *list,int position)
{
/*检查position是否合法*/
if(position>list->lenth)
{
printf("你输入了非法位置!");
}
else
{
int i;
for(i = position -1;i<list->lenth;i++)
{
*(list->pdata+i) = *(list->pdata+i+1);
}
}
--list->lenth;
}
 
/*获取链表指定位置的元素*/
int get(SqList *list,int position)
{
if( position <= list->lenth)
{
return *(list->pdata+(position-1));
}
else
{
printf("你输入了非法的位置!");
return NULL;
}
}
/*重新设置链表的容量*/
void resize(SqList *list)
{
/*分配一个新的存储空间*/
int newContain = list->contain+initSize;
int *tmp = (int *) calloc(newContain,sizeof(int));
/*复制到新的空间*/
int i;
for(i=0;i<list->lenth;i++)
{
*(tmp+i) = *(list->pdata+i);
}
/*释放*/
free(list->pdata);
list->pdata = tmp;
list->contain = newContain;
}