筆者現大三,這篇博文及後面的幾篇博文都是對大二所做的題目一些總結,哈哈,感覺自己那時候學的還可以,希望自己這點筆記能對你們有點幫助吧,加油!!!其實資料結構也沒傳說中的那麼難,並且以後在我們面試的時候,資料結構可是面試官的法寶,對吧,咱們不能輸在起跑線線上,好了,廢話不多說,現在讓我們來學習最簡單鍊錶——單鏈表。我先把老師給我們出的題目給大家看看吧,不知道我們是不是一樣的(純潔的微笑),題目如下:
設計乙個包含學生基本資訊(學號,姓名,成績)的單鏈表,程式設計完成如下功能:
⑴ 初始化單鏈表 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...
資料結構之單鏈表
由於順序表再插入或者刪除時需要移動大量資料,並且如果表比較大,會比較難分配連續的儲存空間導致儲存資料失敗。因此可以採用鍊錶結構,鍊錶結構是一種動態儲存分配的結構形式,可以根據需要動態的申請所需的儲存單元。鍊錶又分為單鏈表,雙向鍊錶,以及單迴圈鍊錶,多重鏈的迴圈鍊錶。本文先介紹單鏈表。典型的單鏈表結構...