順序結構鏈表

/**
 *用順序存儲結構實現的鏈表
 */
#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;
}
 
 
 
 
 
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章