</pre><pre name="code" class="cpp"> #include <stdio.h>
#include <stdlib.h>
//鏈表的定義以及基本操作
typedef void List;
typedef void ListNode;
//創建一個空鏈表,並返回
List * List_Create(int capacity);
//將鏈表清空
void List_Clear(List * list);
//銷燬鏈表
void List_Destroy(List *list);
//刪除指定位置的數據
ListNode * List_Delete(List *list,int pos);
//往鏈表內插入數據
int List_Insert(List * list,ListNode * node);
//得到鏈表中位置爲pos的數據
ListNode * List_Get(List * list,int pos);
//返回鏈表的長度
int List_Length(List *list);
//順序鏈表的相關定義
typedef struct _tag_linklist TgList;
typedef int TgListNode;
struct _tag_linklist{
int length;
int capacity;
TgListNode * node;
};
//線性順序存儲鏈表具體操作的相關實現
List * List_Create(int capacity)
{
TgList * ret = NULL;
if(capacity>0){
//注意此處的內存分配大小計算
ret = (TgList *)malloc(sizeof(TgList)+sizeof(TgListNode) * capacity);
}
if(ret != NULL){
ret->capacity = capacity;
ret->length = 0;
//注意此處加1操作
ret->node = (TgListNode *)(ret+1);
}
return ret;
}
void List_Clear(List * list)
{
TgList * tlist = (TgList *)list;
if(tlist != NULL){
tlist->length = 0;
}
}
void List_Destroy(List *list)
{
free(list);
}
int List_Insert(List * list,ListNode * node)
{
TgList * tlist = (TgList *)list;
if(tlist->length<tlist->capacity){
tlist->node[tlist->length++] = (TgListNode) node;
return 1;
}
return 0;
}
ListNode * List_Delete(List *list,int pos)
{
TgList * tlist = (TgList *)list;
ListNode * tnode = List_Get(list,pos);
int i;
if(tlist !=NULL && pos<tlist->length){
for(i=pos;i<tlist->length-1;i++)
{
tlist->node[i] = tlist->node[i+1];
}
tlist->length--;
}
return tnode;
}
ListNode * List_Get(List * list,int pos)
{
TgList * tlist = (TgList *)list;
if(tlist != NULL && pos<tlist->length)
{
return (ListNode *)tlist->node[pos];
}
return NULL;
}
int List_Length(List *list)
{
TgList * tlist = (TgList *)list;
if(tlist !=NULL) {
return tlist->length;
}
}
//返回鏈表最大容量
int List_Capacity(List * list)
{
TgList * tlist = (TgList *)list;
if(tlist != NULL){
return tlist->capacity;
}
return -1;
}
//添加輸出函數用於具體測試
void List_Print(List *list)
{
TgList * tlist = (TgList *)list;
int i;
if(tlist != NULL){
for(int i=0;i<tlist->length;i++) {
printf("the %d element %d\n",i+1,tlist->node[i]);
}
}
}
int main()
{
int a[5] ={1,2,3,4,5};
int i;
List * list = List_Create(5);
for(i=0;i<5;i++){
//注意這裏要將int強制轉換爲void *
List_Insert(list,(void *)a[i]);
}
List_Print(list);
printf("%d\n",List_Length(list));
printf("%d\n",List_Capacity(list));
printf("%d\n",List_Delete(list,3));
List_Print(list);
printf("%d\n",List_Length(list));
printf("%d\n",List_Capacity(list));
printf("%d\n",List_Get(list,3));
return 0;
}
菜鳥之路--線性表__順序存儲
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.