《資料結構》實驗三:
鞏固線性表的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。
準備時間為第 7 周到第 8 周,具體集中實驗時間為第 4 週第 2 次課。
2個學時。
1.建立乙個由 n 個學生成績的順序表,n 的大小由自己確定,每乙個學生的成績資訊由自己確定,實現資料的對錶進行插入、刪除、查詢等操作。分別輸出結果。
要求如下:
(3)用雙鏈表實現。
#ifndef linklist_h
#define linklist_h
template//定義模板類
struct dulnode
datatype data;
dulnode*prior,*next;
template
class dullinklist
public:
dullinklist(); //無參建構函式
dullinklist(datatype a,int n); //有參建構函式
~dullinklist(); //析構函式
int locate(datatype x);
void insert(int i,datatype x);
datatype delete(int i);
void printlist();
private:
dulnode*first;
#endif
#include
using namespace std;
template
int dullinklist::locate(datatype x)
dulnode*p=first->next;
int count=1; //工作指標p和累加器count初始化
while(p!=null)
if(p->data==x)return count; //查詢成功,結束函式並返回序號
p=p->next;
count++;
return 0; //退出迴圈,說明查詢失敗
template
void dullinklist::insert(int i,datatype x)
dulnode*p=first,*s=null;
int count=0;
while(p!=null && count//查詢第i-1個結點
p=p->next;
count++;
if(p==null)throw"位置"; //沒有找到第i-1個結點
else
s=new dulnode;s->data=x; //申請乙個結點s,其資料域為x
s->prior=p;
s->next=p->next;p->next=s; //將結點s插入到結點p之後
template
dullinklist::dullinklist()
first=new dulnode; //生成頭結點
first->next=null; //頭結點的指標域置空
first->prior=null;
template
dullinklist::dullinklist(datatype a,int n)
dulnode*r,*s;
first=new dulnode; //生成頭結點
r=first; //尾指標初始化
for(int i=0;is=new dulnode;s->data=a[i]; //為每個陣列元素建立乙個結點
r->next=s;r=s; //將結點s插入到終端結點之後
r->next=null; //單鏈表建立完畢,將終端結點的指標域置空
template
datatype dullinklist::delete(int i)
dulnode*p=first,*q=null;
int count=0;
while(p!=null && count//查詢第i-1個結點
p=p->next;
count++;
if(p==null||p->next==null) //結點p不存在或p的後繼結點不存在
throw"位置";
else
datatype x=p->data;
(p->prior)->next=p->next;
(p->next)->prior=p->prior;
delete q;
return x;
template
dullinklist::~dullinklist()
dulnode*q=null;
while(first!=null) //釋放單鏈表的每乙個結點的儲存空間
q=first; //暫存被釋放結點
first->prior->next=first->next;
first->next->prior=first->prior;
first=first->next; //first指向被釋放結點的下一結點
delete q;
delete first;
template
void dullinklist::printlist()
dulnode*p=first->next; //工作指標p初始化
while(p!=null)
cout
p=p->next; //工作指標p後移
cout
int r[5]=;
dullinklist l(r,5);
cout<
tryl.insert(2,55); //在第2個位置插入值為55的元素
catch(char *s)
cout
cout<
cout
tryl.delete(1); //刪除第1個元素
catch(char *s)
cout
return 0;
執行結果:
資料結構之雙鏈表
前面我們介紹了單鏈表,單鏈表的優點是沒有空間的限制,可以隨意開闢空間。但與我們這次要講的雙鏈表相比,就有點相形見絀了。因為哪怕是單鏈表,在進行查詢 插入 排序等等時都要進行線性表的遍歷,而我們往往需要的是目標節點的前乙個節點,所以經常一不小心就錯過了我們需要的節點,或者經常需要乙個當前節點的備份,以...
資料結構 雙鏈表
typedef struct nodenode 雙鏈表的根節點的bwd指標指向雙鏈表的最後乙個節點,fwd指標指向雙鏈表的第乙個節點,雙鏈表的value欄位為空 以下程式是將乙個值插入到乙個有序的雙鏈表中,如果鍊錶中已經有和該值相同的節點則不插入 include include typedef st...
資料結構 雙鏈表
目標 掌握雙鏈表的資料結構 來看看什麼是雙鏈表吧 雙鏈表與單鏈表的區別,單鏈表是單項的 而雙鏈表是有左右的 題目acwing 827 實現乙個雙鏈表,雙鏈表初始為空,支援5種操作 1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k個插入的數刪除 4 在第k個插入的數左側插入乙個數 5 在第k...