資料結構 之 單鏈表(含例項)

2021-07-23 15:28:39 字數 3982 閱讀 2562

筆者現大三,這篇博文及後面的幾篇博文都是對大二所做的題目一些總結,哈哈,感覺自己那時候學的還可以,希望自己這點筆記能對你們有點幫助吧,加油!!!其實資料結構也沒傳說中的那麼難,並且以後在我們面試的時候,資料結構可是面試官的法寶,對吧,咱們不能輸在起跑線線上,好了,廢話不多說,現在讓我們來學習最簡單鍊錶——單鏈表。我先把老師給我們出的題目給大家看看吧,不知道我們是不是一樣的(純潔的微笑),題目如下:

設計乙個包含學生基本資訊(學號,姓名,成績)的單鏈表,程式設計完成如下功能:

⑴ 初始化單鏈表 l: 根據使用者指定的學生數, 採用尾插法插入學生結點;

⑵ 列印表中所有學生資訊: 逐個顯示表中所有學生的基本資訊;

⑶ 判斷 l 是否為空表;

⑷ 查詢指定的學生: 根據姓名進行查詢, 輸出此學生的學號和成績;

⑸ 根據指定的位置, 返回並輸出相應學生的基本資訊;

⑹ 給定乙個學生資訊, 將其插入到表中指定的位置;

⑺ 刪除指定位置的學生記錄;

⑻ 統計表中學生個數(求表長度);

⑼ 銷毀表 l;

以上為必做題, 下面為附加題(選做) 。

⑽ 建立兩個有序(學號) 的學生單鏈表 la 和 lb: 分別向 la 和 lb 逐個輸入 m 個和 n 個

學生的資訊(並不一定按學號大小順序輸入);

⑾ 列印表 la 和 lb 中的學生資訊;

⑿ 將 la 和 lb 歸併為新的有序表 lc;

⒀ 列印表 lc 中的學生資訊;

⒁ 銷毀表 la、 lb 和 lc。

其他要求:

⑴ 將所需要的標準標頭檔案以及一些符號常量的定義等放在 common.h 標頭檔案中;

⑵ 單鏈表型別定義和基本操作函式宣告放在 linklist.h 標頭檔案中;

⑶ 基本操作函式的實現放在 linklist.cpp 檔案中;

工程圖:

1.先建個工程,然後寫好名為linklist.h標頭檔案

#include#includeusing namespace std;

typedef struct elemtype

elemtype;

typedef struct node //鉤造鍊錶結構體

lnode,*linklist;

void print(); //列印目錄函式

void creatlist(linklist &l); //建立鍊錶l

void creatlist(linklist la,linklist lb,linklist &lc);//歸併la、lb,建立lc

void displist(linklist &l); //輸出鍊錶

void panduan(linklist l); //判斷鍊錶l是否為空

void locatelist(linklist l,elemtype e); //通過學生姓名查詢學生資訊

void locklist(linklist l,int i); //通過位置查詢學生資訊

void charu(linklist &l,elemtype e,int i); //將一位學生的資訊插入表中指定位置

void deletelist(linklist &l,int i); //刪除指定位置的學生資訊

void lengthlist(linklist l); //求鍊錶l中學生的個數

void destorylist(linklist &l); //銷毀鍊錶l

2.寫對鍊錶操作(linklist.cpp)

#include"linklist.h"

void print() //列印目錄函式

void creatlist(linklist &l) //建立鍊錶l

p=l->next; //鍊錶排序

while(p)

q=q->next;

} p=p->next;

} printf("完成錄入!\n");

}void creatlist(linklist la,linklist lb,linklist &lc)//歸併la、lb,建立lc

else

}pc->next=pa?pa:pb;

delete lb;

printf("歸併完成!\n");

}void displist(linklist &l) //輸出鍊錶

else }

}void panduan(linklist l) //判斷鍊錶l是否為空

else }

void locatelist(linklist l,elemtype e) //通過學生姓名查詢學生資訊

else

p=p->next;

} if(p==null) printf("未查找到!\n");

printf("\n");

}}void locklist(linklist l,int i) //通過位置查詢學生資訊

else

if(p==null || j>i)

printf("學號:%d ",p->data.number);

printf("姓名:%s ",p->data.name);

printf("分數:%.3f",p->data.score);

printf("\n"); }}

void charu(linklist &l,elemtype e,int i) //將一位學生的資訊插入表中指定位置

else

q=new lnode;

q->data.number=e.number;

strcpy(q->data.name,e.name);

q->data.score=e.score;

q->next=p->next;

p->next=q;

printf("插入成功!\n"); }}

void deletelist(linklist &l,int i) //刪除指定位置的學生資訊

else

p->next=p->next->next;

printf("刪除成功!\n"); }}

void lengthlist(linklist l) //求鍊錶l中學生的個數

else

printf("學生的個數:%d\n",j); }}

void destorylist(linklist &l) //銷毀鍊錶l

printf("銷毀成功!\n");

}

#include"common.h"

#include"linklist.h"

int main()

} return 0;

}

執行截圖:

資料結構之單鏈表

date 08 07 06 descript 單鏈表的實現與應用 public class linlist public node gethead 定位函式 public void index int i throws exception if i 1 current head.next int j...

資料結構之單鏈表

鍊錶 儲存結構的一種,包含兩個部分,資料域和指標域,相對於順序儲存結構來說,插入和刪除的演算法時間複雜度只為o 1 定義 定義 typedef struct node linklist linklist,指標指向每乙個元素 typedef struct nodenode 以下為簡單的c語言實現 in...

資料結構之單鏈表

由於順序表再插入或者刪除時需要移動大量資料,並且如果表比較大,會比較難分配連續的儲存空間導致儲存資料失敗。因此可以採用鍊錶結構,鍊錶結構是一種動態儲存分配的結構形式,可以根據需要動態的申請所需的儲存單元。鍊錶又分為單鏈表,雙向鍊錶,以及單迴圈鍊錶,多重鏈的迴圈鍊錶。本文先介紹單鏈表。典型的單鏈表結構...