學院: 計算機學院
專業: 電腦科學與技術
指導教師朱戰立
班級學號: 計1201 201207010117
姓名杜曉燕
題目:單迴圈鍊錶
問題描述:設計乙個單迴圈鍊錶並對其進行簡單的刪除插入操作。
基本要求:
(1)設計單迴圈鍊錶的操作,包括初始化、求元素個數、插入、刪除等。
(2)設計輸出單迴圈鍊錶中所有資料元素的輸出函式。
(3)設計乙個測試主函式。其中資料元素的型別任意。
測試資料:依次輸入1,2,3,4,5,6,7,8,9,10,求鍊錶元素個數,刪除5,再依次輸出資料元素。
演算法思想:主函式主要是在帶頭結點的迴圈單鏈表中(1)求元素個數,其主要思想是再迴圈前,指標變數p指向頭結點,計數變數i=0;迴圈結束的條件為p->next=head,迴圈中,每次讓指標p指向p->next,讓計數變數i加1;最終返回計數值i。(2)刪除第i個結點,其主要思想是在迴圈單鏈表中尋找到第i-1個結點並由指標p指示,然後讓指標s指向a[i]結點,並把資料元素a[i]的值賦給x,最後把a[i]結點脫鏈,並動態釋放a[i]結點的儲存空間。
模組劃分:
(1)操作實現包括:結點結構體定義、初始化操作、求當前資料個數、插入乙個結點操作、刪除乙個結點操作以及取資料元素操作;
(2)實現檔案包含主函式voidmain(void),其功能是測試所設計的迴圈單鏈表的正確性。
資料結構:
鍊錶中的結點的結構體定義如下:
typedef struct node
slnode;
源程式:
#include
#include
typedef int datatype;
typedef struct node
slnode;
void listinitiate(slnode **head)
int listlength(slnode*head)
int listinsert(slnode*head,int i,datatype x)
if(j!=i-1)
q=( slnode*)malloc(sizeof(slnode));
q->data=x;
q->next=p->next;
p->next=q;
return 1;}
int listdelete(slnode*head,int i,datatype *x)
if(j!=i-1)
s=p->next;
*x=s->data;
p->next=p->next->next;
free(s);
return 1;}
int listget(slnode*head,int i,datatype *x)
if(j!=i)
*x=p->data;
return 1}
void main(void)
printf("\n");
listlength(head);
printf("%d \n",i);
listdelete(head, 4, &x刪除資料元素5*/
for(i = 0; i < listlength(head); i++)
}測試情況:
(1)程式執行結果為:
(2)測試結果分析:
程式執行結果與**完全相同,說明設計的單迴圈鍊錶是正確的。
資料結構實驗報告
實驗報告 實驗課程 資料結構 實驗專案實驗 專業 電腦科學與技術 姓名於凡 學號 10703070328 指導教師汪林林 實驗時間 2008 12 7 重慶工學院計算機學院 實驗一線性表 1.實驗要求 掌握資料結構中線性表的基本概念。熟練掌握線性表的基本操作 建立 插入 刪除 查詢 輸出 求長度及合...
資料結構實驗報告
實驗一線性表的基本操作 1 實驗目的2 2 實驗環境2 3 實驗內容,主要 除錯與執行 2 4 總結14 實驗二棧的基本操作 1 實驗目的15 2 實驗環境15 3 實驗內容,主要 除錯與執行 15 4 總結18 實驗三赫夫曼樹 1 實驗目的18 2 實驗環境18 3 實驗內容,主要 除錯與執行 1...
資料結構實驗報告
實驗題目 計算機與通訊工程學院 2014 實驗一線性表的應用 實驗目的 1 掌握線性表的邏輯結構定義 2 掌握線性表的兩種儲存結構 順序和鏈式 3 掌握順序表和煉表的定義及基本操作 實驗內容 通過程式設計完成具有一定實際意義的課題,加深對線性表應用的理解和掌握。參考題目如下所示。學生可在完成以下題目...