線性表的鏈式表示和實現

2021-06-28 14:04:31 字數 2901 閱讀 4076

標頭檔案:函式的宣告

#include #include #include #include typedef int elemtype;

typedef struct node

listnode,*linklist;//listnode鍊錶的結點型別,linklist指向鍊錶結點的指標型別

void initlist(linklist *head);//單鏈表的初始化操作

int listempty(linklist head);//判斷單鏈表是否為空

listnode* get(linklist head,int i);//按序號查詢操作

listnode* locateelem(linklist head,elemtype e);//按內容查詢操作

int locatepos(linklist head,elemtype e);//定位操作

elemtype modiflist(linklist head,int i,elemtype e);//修改操作

int insertlist(linklist head,int i,elemtype e);//插入操作

int deletelist(linklist head,int i,elemtype *e);//刪除操作

int listlength(linklist head);//求表長操作

void destroylist(linklist head);//銷毀鍊錶操作

函式的定義

#include "鍊錶.h"

void initlist(linklist *head)//單鏈表的初始化操作

(*head)->next = null;

}int listempty(linklist head)//判斷單鏈表是否為空

else }

listnode* get(linklist head,int i)//按序號查詢操作

if (i < 1)//在查詢第i個元素之前,判斷鍊錶是否合法

while(p->next != null && j < i)

if(j == i)

else }

listnode* locateelem(linklist head,elemtype e)//按內容查詢操作

else

}return p;

}int locatepos(linklist head,elemtype e)//定位操作

p = head->next ;

while(p)

else

}if(!p)

return 0;

}elemtype modiflist(linklist head,int i,elemtype e)

p = head->next;

if(i < 1)

if(null == p)

while(p != null)

else

j++;

} return 0;

}int insertlist(linklist head,int i,elemtype e)//插入操作

if(j != i-1)//如果沒找到則插入位置錯誤

if((p = (listnode*)malloc(sizeof(listnode))) == null)//新生成乙個結點,並將e賦值給該結點的資料域

p->data = e;

p->next = pre->next;//插入結點操作

pre->next = p;

return 1;

}int deletelist(linklist head,int i,elemtype *e)//刪除操作

if(j != i-1)//如果沒有找到要刪除的位置,說明刪除結點位置錯誤

p = pre->next;//指標p指向單鏈表中的第i個結點,並將該結點的資料域值賦值給e

*e = p->data;

pre->next = p->next;//將前驅結點的指標域指向要刪除結點的下乙個結點,也就是將p指向的結點與單鏈表斷開

free(p);//釋放p指向的節點

return 1;

}int listlength(linklist head)//求表長操作

return count;

}void destroylist(linklist head)//銷毀鍊錶操作

}

函式的測試

#include "鍊錶.h"

int main(void)

; elemtype b = ;

linklist a,b;

listnode *p;

initlist(&a);

initlist(&b);

for(i = 1;i <= sizeof(a)/sizeof(a[0]);i++) }

for(i = 1;i <= sizeof(b)/sizeof(b[0]);i++) }

printf("單鏈表a中的元素有%d個\n",listlength(a));

for(i = 1;i <= listlength(a);i++) }

printf("\n");

printf("單鏈表b中的元素有%d個\n",listlength(b));

for(i = 1;i <= listlength(b);i++) }

printf("\n");

modiflist(a,1,10);

printf("將單鏈表a中的元素修改後有%d個\n",listlength(a));

for(i = 1;i <= listlength(a);i++) }

printf("\n");

return 0;

}

線性表的鏈式表示和實現(鏈式)

課程名 資料結構 實驗目的 1 掌握線性表的定義 2 掌握線性表的基本操作,如建立 查詢 插入和刪除等。實驗要求 定義乙個包含學生資訊 學號,姓名,成績 的順序表和煉表,使其具有如下功能 1 根據指定學生個數,逐個輸入學生資訊 2 逐個顯示學生表中所有學生的相關資訊 3 根據姓名進行查詢,返回此學生...

線性表的鏈式表示和實現

線性表的鏈式表示和實現 include include include exit 等 typedef int status define overflow 2 define error 0 define ok 1 線性表的單鏈表儲存結構 struct lnode typedef lnode link...

線性表的鏈式表示和實現

線性表鏈式儲存結構的特點是 用一組任意的儲存單元儲存線性表的資料元素 這組儲存單元可以是連續的,也可以是不連續的 因此,為了表示每個資料元素ai與其直接後繼資料元素a i 1之間的邏輯關係,對資料元素ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後續的資訊 即直接後續的儲存位置 這兩部分...