第一篇:?jiǎn)捂湵韺?shí)驗(yàn)報(bào)告
《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)報(bào)告二
分校:
學(xué)號(hào):
日期:
班級(jí):
姓名:
程序名: L2311.CPP
一、上機(jī)實(shí)驗(yàn)的問題和要求:
單鏈表的查找、插入與刪除。設(shè)計(jì)算法,實(shí)現(xiàn)線性結(jié)構(gòu)上的單鏈表的產(chǎn)生以及元素的查找、插入與刪除。具體實(shí)現(xiàn)要求:
1.從鍵盤輸入20個(gè)整數(shù),產(chǎn)生帶表頭的單鏈表,并輸入結(jié)點(diǎn)值。
2.從鍵盤輸入1個(gè)整數(shù),在單鏈表中查找該結(jié)點(diǎn)。若找到,則顯示“找到了”;否則,則顯示“找不到”。
3.從鍵盤輸入2個(gè)整數(shù),一個(gè)表示欲插入的位置i,另一個(gè)表示欲插入的數(shù)值x,將x插入在對(duì)應(yīng)位置上,輸出單鏈表所有結(jié)點(diǎn)值,觀察輸出結(jié)果。4.從鍵盤輸入1個(gè)整數(shù),表示欲刪除結(jié)點(diǎn)的位置,輸出單鏈表所有結(jié)點(diǎn)值,觀察輸出結(jié)果。5.將單鏈表中值重復(fù)的結(jié)點(diǎn)刪除,使所得的結(jié)果表中個(gè)結(jié)點(diǎn)值均不相同,輸出單鏈表所有結(jié)點(diǎn)值,觀察輸出結(jié)果。
6.刪除其中所有數(shù)據(jù)值為偶數(shù)的結(jié)點(diǎn),輸出單鏈表所有結(jié)點(diǎn)值,觀察輸出結(jié)果。
7.把單鏈表變成帶表頭結(jié)點(diǎn)的循環(huán)鏈表,輸出循環(huán)單鏈表所有結(jié)點(diǎn)值,觀察輸出結(jié)果。8.(★)將單鏈表分解成兩個(gè)單鏈表A和B,使A鏈表中含有原鏈表中序號(hào)為奇數(shù)的元素,而B鏈表中含有原鏈表中序號(hào)為偶數(shù)的元素,且保持原來(lái)的相對(duì)順序,分別輸出單鏈表A和單鏈表B的所有結(jié)點(diǎn)值,觀察輸出結(jié)果。
二、程序設(shè)計(jì)的基本思想,原理和算法描述:
(包括程序的結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),輸入/輸出設(shè)計(jì),符號(hào)名說(shuō)明等)
三、源程序及注釋:
四、運(yùn)行輸出結(jié)果:
五、調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:
六、對(duì)算法的程序的討論、分析,改進(jìn)設(shè)想,其它經(jīng)驗(yàn)教訓(xùn):
七、對(duì)實(shí)驗(yàn)方式、組織、設(shè)備、題目的意見和建議:
第二篇:北郵數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 單鏈表
北京郵電大學(xué) 數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告
實(shí)驗(yàn)名稱: 實(shí)驗(yàn)一
線性表 學(xué)生姓名:
班
級(jí):
班內(nèi)序號(hào):
學(xué)
號(hào):
日
期: 2014年1月3日
實(shí)驗(yàn)?zāi)康?/p>
? 熟悉C++語(yǔ)言的基本編程方法,掌握集成編譯環(huán)境的調(diào)試方法 ? 學(xué)習(xí)指針、模板類、異常處理的使用 ? 掌握線性表的操作的實(shí)現(xiàn)方法 ? 學(xué)習(xí)使用線性表解決實(shí)際問題的能力 實(shí)驗(yàn)內(nèi)容
2.1題目1 根據(jù)線性表的抽象數(shù)據(jù)類型的定義,選擇下面任一種鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)線性表,并完成線性表的基本功能。
線性表存儲(chǔ)結(jié)構(gòu)(五選一):
1、帶頭結(jié)點(diǎn)的單鏈表
2、不帶頭結(jié)點(diǎn)的單鏈表
3、循環(huán)鏈表
4、雙鏈表
5、靜態(tài)鏈表
線性表的基本功能:
1、構(gòu)造:使用頭插法、尾插法兩種方法
2、插入:要求建立的鏈表按照關(guān)鍵字從小到大有序
3、刪除
4、查找
5、獲取鏈表長(zhǎng)度
6、銷毀
7、其他:可自行定義
編寫測(cè)試main()函數(shù)測(cè)試線性表的正確性。程序分析
3.1 存儲(chǔ)結(jié)構(gòu) 單鏈表的存儲(chǔ)結(jié)構(gòu):
3.2 關(guān)鍵算法分析
一、關(guān)鍵算法 1.頭插法
自然語(yǔ)言描述:a.在堆中建立新結(jié)點(diǎn)
b.將a[i]寫入到新結(jié)點(diǎn)的數(shù)據(jù)域
c.修改新結(jié)點(diǎn)的指針域
d.修改頭結(jié)點(diǎn)的指針域,將新結(jié)點(diǎn)加入鏈表中 代碼描述: template
front = new Node
}
} s->next = front->next;front->next = s;時(shí)間復(fù)雜度:O(n)
2.尾插法
自然語(yǔ)言描述:a.在堆中建立新結(jié)點(diǎn)
b.將a[i]寫入到新結(jié)點(diǎn)的數(shù)據(jù)域
c.將新結(jié)點(diǎn)加入到鏈表中
d.修改修改尾指針 代碼描述: template
front = new Node
}
} s->data = a[i];s->next = r->next;r->next= s;r=s;時(shí)間復(fù)雜度:O(n)
3.析構(gòu)函數(shù)
自然語(yǔ)言描述:a.新建立一個(gè)指針,指向頭結(jié)點(diǎn)
b.移動(dòng)a中建立的指針
c.逐個(gè)釋放指針
代碼描述: template
Node
} } delete front;4.按位查找函數(shù)
自然語(yǔ)言描述: a.初始化工作指針p和計(jì)數(shù)器j,p指向第一個(gè)結(jié)點(diǎn),j=1
b.循環(huán)以下操作,直到p為空或者j等于1
b1:p指向下一個(gè)結(jié)點(diǎn)
b2:j加1
c.若p為空,說(shuō)明第i個(gè)元素不存在,拋出異常
d.否則,說(shuō)明p指向的元素就是所查找的元素,返回元素地址
代碼描述: template
Node
if(j
} else break;p = p->next;j++;
} if(!p)throw“查找位置非法”;else
return p;} 時(shí)間復(fù)雜度:O(n)
5.按值查找函數(shù)
自然語(yǔ)言描述:a.初始化工作指針p和計(jì)數(shù)器j,p指向第一個(gè)結(jié)點(diǎn),j=1
b.循環(huán)以下操作,找到這個(gè)元素或者p指向最后一個(gè)結(jié)點(diǎn)
b1.判斷p指向的結(jié)點(diǎn)是不是要查找的值,如果是,返回j;
b2.否則p指向下一個(gè)結(jié)點(diǎn),并且j的值加一
c.如果找到最后一個(gè)結(jié)點(diǎn)還沒有找到要查找的元素,返回查找失敗信息
代碼描述: template
Node
} return-1;if(p->data == x)return j;else { p = p->next;
j++;} } 時(shí)間復(fù)雜度:O(n)6.插入函數(shù)
自然語(yǔ)言描述: a.在堆中建立新結(jié)點(diǎn)
b.將要插入的結(jié)點(diǎn)的數(shù)據(jù)寫入到新結(jié)點(diǎn)的數(shù)據(jù)域
c.修改新結(jié)點(diǎn)的指針域
d.修改前一個(gè)指針的指針域,使其指向新插入的結(jié)點(diǎn)的位置
代碼描述: template
Node
} else throw“插入位置非法”;Node
自然語(yǔ)言描述:a.從第一個(gè)結(jié)點(diǎn)開始,查找要?jiǎng)h除的位數(shù)i前一個(gè)位置i-1的結(jié)點(diǎn)
b.設(shè)q指向第i個(gè)元素
c.將q元素從鏈表中刪除
d.保存q元素的數(shù)據(jù)
e.釋放q元素 代碼描述: template
T x=q->data;
} p->next = q->next;delete q;return x;
8.遍歷打印函數(shù)
自然語(yǔ)言描述: a.判斷該鏈表是否為空鏈表,如果是,報(bào)錯(cuò)
b.如果不是空鏈表,新建立一個(gè)temp指針
c.將temp指針指向頭結(jié)點(diǎn)
d.打印temp指針的data域
e.逐個(gè)往后移動(dòng)temp指針,直到temp指針的指向的指針的next域?yàn)榭?/p>
代碼描述: template
} Node
} cout<
自然語(yǔ)言描述: a.判斷該鏈表是否為空鏈表,如果是,輸出長(zhǎng)度0
b.如果不是空鏈表,新建立一個(gè)temp指針,初始化整形數(shù)n為0
c.將temp指針指向頭結(jié)點(diǎn)
d.判斷temp指針指向的結(jié)點(diǎn)的next域是否為空,如果不是,n加一,否則return n
e.使temp指針逐個(gè)后移,重復(fù)d操作,直到temp指針指向的結(jié)點(diǎn)的next域?yàn)?,返回n 代碼描述: template
} Node
} return i-1;p = p->next;i++;4 程序運(yùn)行結(jié)果
4.1主函數(shù)流程圖
4.2程序運(yùn)行框圖
實(shí)驗(yàn)心得
1.調(diào)試時(shí)出現(xiàn)的問題及解決的方法
在編寫按值查找函數(shù)時(shí),由于沒有處理好指針類型的原因,導(dǎo)致指針無(wú)法正常返回,屢屢報(bào)錯(cuò)。最后意識(shí)到c++沒有指針強(qiáng)制類型的轉(zhuǎn)換機(jī)制,經(jīng)過細(xì)致檢查后才改正錯(cuò)誤使得程序正常運(yùn)行。2.心得體會(huì)
了解了單鏈表的基本的操作函數(shù)實(shí)現(xiàn),對(duì)鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)有了較好的認(rèn)識(shí) 3.下一步的改進(jìn)
可以增加完善報(bào)錯(cuò)機(jī)制,增強(qiáng)程序的健壯性
完整源代碼
#include
template
};
template
};
//template
Node
template
}
template
}
template
} front = p;p = p->next;delete front;front = new Node } Node } Node } Node } cout< template } template } Node } return-1;if(p->data == x)return j;else { } p = p->next; j++;Node } if(!p)throw“查找位置非法”;else return p;if(j } else break;p = p->next;j++; template } template } template } void main(){ Node } return i-1;p = p->next;i++;Node } else throw“插入位置非法”;Node T x=q->data; } int n;cout<<“將要輸入的鏈表長(zhǎng)度為:”;cin>>n;int *b=new int[n];cout<<“輸入鏈表中的元素:”;for(int k=0;k 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 西華數(shù)學(xué)與計(jì)算機(jī)學(xué)院上機(jī)實(shí)踐報(bào)告 課程名稱:數(shù)據(jù)結(jié)構(gòu) 指導(dǎo)教師:唐劍梅 上機(jī)實(shí)踐名稱: 上機(jī)實(shí)踐編號(hào):1 年級(jí): 2011 姓名:蔣俊 學(xué) 號(hào) : *** 上機(jī)實(shí)踐成績(jī): 上機(jī)實(shí)踐日期:2012-11-6 上機(jī)實(shí)踐時(shí)間:8:00-9:30 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解線性表的邏輯結(jié)構(gòu)特性,以及這種特性在計(jì)算機(jī)內(nèi)的兩種存儲(chǔ)結(jié)構(gòu)。 2.重點(diǎn)是線性表的基本操作在兩種存儲(chǔ)結(jié)構(gòu)上的實(shí)現(xiàn);其中以鏈表的操作為側(cè)重點(diǎn);并進(jìn)一步學(xué)習(xí)程序設(shè)計(jì)方法。 3.掌握棧這種數(shù)據(jù)結(jié)構(gòu)特性及其主要存儲(chǔ)結(jié)構(gòu),并能在現(xiàn)實(shí)生活中靈活運(yùn)用。 4.掌握隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)特性及其主要存儲(chǔ)結(jié)構(gòu),并能在現(xiàn)實(shí)生活中靈活運(yùn)用。 5.了解和掌握遞歸程序設(shè)計(jì)的基本原理和方法。 6.掌握使用 C++面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)源程序的方法。 二、實(shí)驗(yàn)內(nèi)容 1.熟悉前面的【程序示例2】,按照約瑟夫問題的方法2,試著不設(shè)頭結(jié)點(diǎn)改寫原來(lái)的程序,上機(jī)調(diào)試運(yùn)行。 2.用鏈表建立通訊錄。通訊錄內(nèi)容有:姓名、通訊地址、電話號(hào)碼。 要求:(1)通訊錄按姓名項(xiàng)的字母順序排列; (2)能查找通訊錄中某人的信息; [提示] 用鏈表來(lái)存放這個(gè)通訊錄,一個(gè)人的信息作為一個(gè)結(jié)點(diǎn)。成鏈的過程可以這樣考慮:先把頭結(jié)點(diǎn)后面的 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 char name[20]; // 姓名子域 NodeType *next; // 指針域 };class Jose //類聲明 { private: NodeType *Head; public: Jose(){}; ~Jose(){ }; void creat(); void outs(); };void Jose::creat(){ int i=0, n; NodeType *newp, *pre; cout<<“n 輸入總?cè)藬?shù) n=”;cin>>n; pre=new NodeType; Head=new NodeType; pre->num=1; cout<<“n 編號(hào)”<<1<<“的人 姓名=”; cin>>pre->name; cout<<“n 密碼”<<1<<“的人 密碼=”; cin>>pre->psw; Head=pre; Head->next=Head; for(i=1;i { newp=new NodeType; newp->num=i+1; cout<<“n 編號(hào)”< 姓名=”;cin>>newp->name; cout<<“n 密碼”< 密碼=”; cin>>newp->psw; newp->next=Head; pre->next=newp; pre=newp; } } void Jose::outs() { int m,i; NodeType *q=Head, *p; cout<<“n 輸入m值(m>=2)”;cin>>m; cout<<“n 根據(jù)m值,開始報(bào)數(shù)輸出:”< while(q->next!=q) 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 { for(i=1;i cout<<“編號(hào)為:”< cout<<“n 編號(hào)為:”< m=q->psw; p->next=q->next;delete q; q=p->next; } cout<<“編號(hào)為:”< cout<<“n 編號(hào)為:”< delete q;} int main() { Jose h; h.creat(); h.outs(); return 0;} 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 { char Add[20]; char name[20]; char tel[20]; };struct NodeType { ElemType data; NodeType *next;};class Sqlist { private: NodeType *Head; public: Sqlist(); ~Sqlist(); void creat(); void Insert(ElemType x); void Delet(ElemType x); void PrintOut(); };Sqlist::Sqlist(){ Head=new NodeType;Head->next=NULL;strcpy(Head->data.name,“姓名”);strcpy(Head->data.Add,“地址”);strcpy(Head->data.tel,“電話號(hào)碼”);} Sqlist::~Sqlist(){ NodeType *p=Head->next; while(p!=NULL) {Head->next=p->next; delete p; p=Head->next;} } void Sqlist::creat() //初步建立一個(gè)通訊錄 { NodeType*p,*s,*q;ElemType x; 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 int a;q=Head;cout<<“n 輸入姓名:”;cin>>x.name;cout<<“n 輸入通訊地址:”;cin>>x.Add;cout<<“n 輸入電話號(hào)碼:”;cin>>x.tel;p=new NodeType;p->data=x;Head->next=p;p->next=NULL;cout<<“輸入一個(gè)數(shù)。若為-1,結(jié)束輸入:”< while(a!=-1){ cout<<“n 輸入姓名:”;cin>>x.name;cout<<“n 輸入通訊地址:”;cin>>x.Add;cout<<“n 輸入電話號(hào)碼:=”;cin>>x.tel;s=new NodeType;s->data=x;if(strcmp(s->data.name,p->data.name)>0){ p->next=s;s->next=NULL; p=s;} else{ s->next=p;q->next=s;} q=q->next; cout<<“輸入一個(gè)數(shù)。若為-1,結(jié)束輸入:”< 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 s->data=x;q=Head;p=q->next;while(p!=NULL&&strcmp(p->data.name,x.name)<0){q=p;p=p->next;} s->next=p;q->next=s;} void Sqlist::Delet(ElemType x)//刪除 { NodeType *p,*q;q=Head;p=Head->next;while(p!=NULL&&strcmp(p->data.name,x.name)!=0){q=p;p=p->next;} if(p!=NULL){ q->next=p->next;delete p;cout<<“刪除結(jié)點(diǎn)成功”< { NodeType *p;p=Head->next;while(p!=NULL){ cout< data.name<<“ ”;cout< data.tel<<“ ”;cout< data.Add<<“ ”;p=p->next;} cout< Sqlist as; cout<<“n 通訊錄演示”; do{ cout<<“nn”; cout<<“nn 1.初步建立一個(gè)通訊錄(單鏈表) ”; 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 cout<<“nn 2.插入新的電話記錄 ”; cout<<“nn 3.刪除一個(gè)電話記錄”; cout<<“nn 4.結(jié)束程序”; cout<<“n******************************** ”; cout<<“n 請(qǐng)輸入你的選擇(1,2,3,4)”;cin>>k;switch(k){ case 1:{ as.creat();as.PrintOut();}break; case 2:{ cout<<“n 插入的數(shù)據(jù) 姓名”;cin>>e.name; cout<<“n 插入的數(shù)據(jù) 電話號(hào)”;cin>>e.tel; cout<<“n 插入的數(shù)據(jù) 地址”;cin>>e.Add; as.Insert(e);as.PrintOut(); }break; case 3:{ cout<<“n 被刪除的姓名= ”; cin>>e.name; as.Delet(e); as.PrintOut(); }break; default:break; } }while(k>=1&&k<4); cout<<“n 再見!”; return 0;} 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 const int MAXSIZE=100; // 數(shù)組的容量 class SqStack { private: ElemType elem[MAXSIZE]; int top; public: SqStack(); ~SqStack(){}; void SqStack::push(ElemType e); ElemType SqStack::pop(); void SqStack::PrintOut(); int SqStack::IsEmpty(); void f(ElemType N,ElemType M);};void SqStack::f(ElemType N,ElemType M){ SqStack s; ElemType e;while(N){ s.push(N%M); N=N/M;} while(!s.IsEmpty()){ e=s.pop(); if(e>=10) { e=e%10; switch(e) { case 1:cout<<“b”< case 2:cout<<“c”< case 3:cout<<“d”< case 4:cout<<“e”< case 5:cout<<“f”< default:cout<<“a”< } } else cout< 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 } cout< {cout<<“棧滿溢出”< return; } else{top++; elem[top]=e;} } ElemType SqStack::pop(){ElemType x; if(top==0) { cout<< “ 棧為空,不能出棧操作”< else { x=elem[top]; top--; return x;} } void SqStack::PrintOut() {int k; cout<<“n PrintOut Data:n”; for(k=top;k>=1;k--)cout< cout< else return 0;} void main(){ ElemType a,m;cout<<“請(qǐng)輸入一個(gè)正整數(shù):”< 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 五、總結(jié) 通過本次實(shí)驗(yàn),我熟悉了鏈表的操作,了解了線性表在現(xiàn)實(shí)生活中的運(yùn)用,認(rèn)識(shí)了順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)這兩種結(jié)構(gòu)。本次上機(jī)實(shí)踐基本完成了實(shí)驗(yàn)內(nèi)容,但完成的不是很好,以后需要更加努力地掌握基本的知識(shí)。實(shí)驗(yàn)內(nèi)容對(duì)于隊(duì)列的運(yùn)用沒有涉及,希望以后有所涉及。 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 實(shí)驗(yàn)四 單鏈表的建立 一、實(shí)驗(yàn)?zāi)康?/p> 1.掌握線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)——單鏈表的定義及C語(yǔ)言實(shí)現(xiàn)。2.掌握線性表在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)——單鏈表中的各種基本操作。 二、實(shí)驗(yàn)內(nèi)容 1.建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表,結(jié)點(diǎn)的值域?yàn)檎蛿?shù)據(jù)。要求將用戶輸入的數(shù)據(jù)分別按尾插入法和頭插法來(lái)建立相應(yīng)單鏈表?!局R(shí)要點(diǎn)】 為了便于實(shí)現(xiàn)各種運(yùn)算,通常在單鏈表的第一個(gè)結(jié)點(diǎn)前增設(shè)一個(gè)附加結(jié)點(diǎn),稱為頭結(jié)點(diǎn),它的結(jié)構(gòu)與表結(jié)點(diǎn)相同,其數(shù)據(jù)域可不存儲(chǔ)信息,也可存儲(chǔ)表長(zhǎng)等附加信息,具體如下圖。 【實(shí)驗(yàn)提示】 單鏈表的結(jié)點(diǎn)結(jié)構(gòu)除數(shù)據(jù)域外,還含有一個(gè)指針域。用C語(yǔ)言描述結(jié)點(diǎn)結(jié)構(gòu)如下: typedef int datatype; /* 線性表中存放整型元素 */ typedef struct LNode / * 結(jié)點(diǎn)類型定義 * / { datatype data; / * 數(shù)據(jù)域 * / struct node *next; / * 指針域 * / }Linklist; /* Linklist為單鏈表類型*/ 注意結(jié)點(diǎn)的建立方法及構(gòu)造新結(jié)點(diǎn)時(shí)指針的變化。構(gòu)造一個(gè)結(jié)點(diǎn)需用到C語(yǔ)言的標(biāo)準(zhǔn)函數(shù)malloc(),如給指針變量p分配一個(gè)結(jié)點(diǎn)的地址: p=(strcut LNode *)malloc(sizeof(Linklist));該語(yǔ)句的功能是申請(qǐng)分配一個(gè)類型為L(zhǎng)inklist的結(jié)點(diǎn)的地址空間,并將首地址存入指針變量p中(或p=new(struct LNode);即生成新結(jié)點(diǎn))。當(dāng)結(jié)點(diǎn)不需要時(shí)可以用標(biāo)準(zhǔn)函數(shù)free(p)釋放結(jié)點(diǎn)存儲(chǔ)空間,這時(shí)p為空值(NULL)。【程序提示】 #include //補(bǔ)充實(shí)現(xiàn)表節(jié)點(diǎn)類型的定義; } Linklist; Linklist * creatlist(){ int x;Linklist *head, *p;// head為單鏈表的頭指針,p指向新建的結(jié)點(diǎn) //補(bǔ)充實(shí)現(xiàn)單鏈表的建立; return(head); // 函數(shù)返回鏈表頭指針head } void output(Linklist *HeadL){ if(HeadL->next==NULL)printf(“空鏈表!n”);else { printf(“鏈表為:n”);Linklist *P;P=HeadL->next;while(P!=NULL){ printf(“%d->”,P->data);P=P->next;} printf(“n”);} } void main(void){ Linklist *List;List=creatlist();output(List);} 【參考程序】 1、尾插法 #include Linklist * creatlist(){ int x; Linklist *head, *p,*r;/* head為頭指針 */ head=new(struct LNode); head->data=0; /* 表頭結(jié)點(diǎn)數(shù)據(jù)域賦值 */ r=head; /* 尾指針的初值為頭結(jié)點(diǎn)head */ printf(“請(qǐng)隨機(jī)輸入互不相同的正整數(shù)以0作為結(jié)束符:n”); scanf(“%d”, &x); /* 讀入第一個(gè)結(jié)點(diǎn)的值 */ while(x!=0) /* 輸入數(shù)據(jù),以0為結(jié)束符 */ { p=new(struct LNode);/* 生成新結(jié)點(diǎn) */ p->data=x; /* 給新結(jié)點(diǎn)的數(shù)據(jù)域賦值 */ r->next=p; /* 新結(jié)點(diǎn)插入到表尾*rear之后 */ r=p; /* 將尾指針rear指向新的尾結(jié)點(diǎn) */ head->data++; /* 鏈表長(zhǎng)度計(jì)數(shù) */ scanf(“%d”, &x); /* 輸入下一個(gè)結(jié)點(diǎn)的數(shù)據(jù) */ } r->next=NULL; /* 將鏈表最后一個(gè)結(jié)點(diǎn)rear指針域置空 */ return(head);/* 函數(shù)返回鏈表頭指針head */ } void output(Linklist *HeadL){ if(HeadL->next==NULL)printf(“空鏈表!n”);else { printf(“鏈表為:n”); Linklist *P; P=HeadL->next; while(P!=NULL) { printf(“%d->”,P->data); P=P->next; } printf(“n”);} } void main(void){ Linklist *List;List=creatlist();output(List);} 2、頭插法 #include Linklist * creatlist(){ int x; Linklist *head, *p;/* head為頭指針 */ head=new(struct LNode); head->data=0; /* 表頭結(jié)點(diǎn)數(shù)據(jù)域賦值 */ head->next=NULL; printf(“n請(qǐng)隨機(jī)輸入一組正整數(shù)以0結(jié)束輸入:n”); scanf(“%d”,&x); /* 輸入第一個(gè)結(jié)點(diǎn)數(shù)據(jù)值 */ while(x!=0) /* 輸入數(shù)據(jù),以0為結(jié)束符 */ { p=new(struct LNode);/* 生成新結(jié)點(diǎn) */ p->data=x;/* 給新結(jié)點(diǎn)的數(shù)據(jù)域賦值 */ p->next=head->next; /* 將新結(jié)點(diǎn)插入表頭結(jié)點(diǎn)head之后 */ head->next=p; head->data++; /* 鏈表長(zhǎng)度計(jì)數(shù) */ scanf(“%d”,&x); /* 輸入下一個(gè)結(jié)點(diǎn)的值 */ } return(head);/* 函數(shù)返回鏈表頭指針head */ } void output(Linklist *HeadL){ } void main(void){ Linklist *List;List=creatlist();output(List);} 方法二 void main(void){ } 2.在第一題的基礎(chǔ)上,增加單鏈表的查找,插入,刪除子程序。#include typedef struct LNode{ int data;struct LNode *next;Linklist *head,*p;head=creatlist();printf(“output the list:n”);p=head->next;while(p){ } printf(“%d ”,p->data);p=p->next;} Linklist; Linklist * creatlist(){ int x; Linklist *head, *p; /* head為頭指針 */ head=new(struct LNode); head->data=0; /* 表頭結(jié)點(diǎn)數(shù)據(jù)域賦值 */ head->next=NULL; cout<<“n請(qǐng)隨機(jī)輸入一組正整數(shù)以0結(jié)束輸入:n”; cin>>x;/* 輸入第一個(gè)結(jié)點(diǎn)數(shù)據(jù)值 */ while(x!=0) /* 輸入數(shù)據(jù),以0為結(jié)束符 */ { p=new(struct LNode);/* 生成新結(jié)點(diǎn) */ p->data=x;/* 給新結(jié)點(diǎn)的數(shù)據(jù)域賦值 */ p->next=head->next; /* 將新結(jié)點(diǎn)插入表頭結(jié)點(diǎn)head之后 */ head->next=p; head->data++; /* 鏈表長(zhǎng)度計(jì)數(shù) */ cin>>x; } return(head);} void output(Linklist *HeadL){ if(HeadL->next==NULL)cout<<“空鏈表!n”;else { cout<<“鏈表為:n”; Linklist *P; P=HeadL->next; while(P!=NULL) { cout< data<<“->”;/* 函數(shù)返回鏈表頭指針head */ /* 輸入下一個(gè)結(jié)點(diǎn)的值 */ P=P->next; } cout<<“n”;} } Linklist *no_search(Linklist *head, int i){ Linklist *p;int j; p=head->next; j=1; /* 從首結(jié)點(diǎn)開始掃描 */ while((p!=NULL)&&(j { p=p->next; /* 掃描下一個(gè)結(jié)點(diǎn) */ j++; } if(i==j)return(p); else return(NULL); /* 若找不到,則返回空指針 */ } Linklist *data_insert(Linklist *head, Linklist *p, int x){ Linklist *s; s =new(struct LNode);/* 建立新結(jié)點(diǎn) */ s->data=x; /* 將x值賦給s→data */ /* 統(tǒng)計(jì)已掃描結(jié)點(diǎn)的個(gè)數(shù) */ s->next=p->next;/* 新結(jié)點(diǎn)s后繼指向原p結(jié)點(diǎn)后繼 */ p->next=s; /* p結(jié)點(diǎn)的后繼指向新結(jié)點(diǎn)s */ return(head); /* 返回帶頭結(jié)點(diǎn)的單鏈表頭指針*/ } Linklist *key_delete(Linklist *head, int x){ Linklist *p, *q; /* p是被刪除結(jié)點(diǎn),q是p的前驅(qū)結(jié)點(diǎn) */ p=head; while((p!=NULL)&&(p->data!=x)) { q=p; p=p->next; } if(p!=NULL) { q->next=p->next; /* 修改p前驅(qū)結(jié)點(diǎn)q指針域 */ /* 釋放結(jié)點(diǎn)空間 */ /* 若該結(jié)點(diǎn)存在,則刪除之 */ free(p); return(head); } /* 函數(shù)返回鏈表頭指針*/ else { cout<<“要?jiǎng)h的結(jié)點(diǎn)不存在,請(qǐng)重輸數(shù)據(jù)!n”; return(NULL); } } void main(void){ Linklist *List,*chazhao;List=creatlist();output(List);chazhao=no_search(List,2);//查找第二個(gè)節(jié)點(diǎn),并輸出數(shù)據(jù)域信息 cout<<“n查找第二個(gè)節(jié)點(diǎn),數(shù)據(jù)域信息為:n”;cout< output(List);List=key_delete(List,50);//刪除數(shù)據(jù)為50的節(jié)點(diǎn) cout<<“n刪除數(shù)據(jù)為50的節(jié)點(diǎn):n”; output(List);} 實(shí)驗(yàn) 四、ASP.NET編程 實(shí)驗(yàn)序號(hào):4 實(shí)驗(yàn)名稱:ASP.NET編程 適用專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)/軟件工程 學(xué)時(shí)數(shù): 8學(xué)時(shí) 一、實(shí)驗(yàn)?zāi)康?/p> 1、熟悉ASP.NET服務(wù)器控件的使用。 2、學(xué)會(huì)使用ASP.NET服務(wù)器控件設(shè)計(jì)Web頁(yè)面。 3、學(xué)會(huì)使用ASP.NET對(duì)象。 二、實(shí)驗(yàn)設(shè)備 裝有WEB程序設(shè)計(jì)相關(guān)軟件。 1、使用ASP.NET控件,如TextBox、Label、Button等,并結(jié)合CSS、Javascript,實(shí)現(xiàn)登錄頁(yè)面的實(shí)現(xiàn)。要求點(diǎn)擊登錄按鈕時(shí),彈出提示:您輸入的用戶名是:**,密碼是:**,*為顯示輸入的用戶名和密碼,同時(shí)將用戶名和密碼寫入session,并跳轉(zhuǎn)到下面第2題頁(yè)面。 <%@ Page Language=“C#” AutoEventWireup=“true” CodeBehind=“l(fā)ogin.aspx.cs” Inherits=“WebApplication2.login” %> style=“margin-bottom: 0px” Text=“用??戶?ì名?”> style=“margin-left: 9px”> style=“margin-left: 39px”> 三、實(shí)驗(yàn)步驟 文檔為doc格式 #include #include #include int saveflag=0; /* 單鏈表內(nèi)容有無(wú)發(fā)生改變,是否需要存盤的標(biāo)志變量 */ struct employee { }; typedef struct Node { void InitList(LinkLi...... //C語(yǔ)言課程設(shè)計(jì) 職工信息管理系統(tǒng)—單鏈表實(shí)現(xiàn) #include "stdio.h" #include "stdlib.h" #include "string.h" int saveflag=0; /*是否需要存盤的標(biāo)志變量*/ struct empl...... #include #include #include typedef struct student { int num; char name[10]; char passwd[6]; int age; int class; int math; int clan; int chinese; int m...... 實(shí) 驗(yàn) 報(bào) 告 實(shí)驗(yàn)名稱 課程名稱 一.實(shí)驗(yàn)?zāi)康?1、進(jìn)一步理解路由器配置的基本原理; 2、熟練掌握PacketTracer軟件的安裝和配置方法; 3、掌握vlan間路由單臂路由的配置。 4、掌...... 實(shí)班級(jí):機(jī)電-156 姓名:李學(xué)東 驗(yàn)報(bào) 告 單管共射放大電路 實(shí)驗(yàn)?zāi)康?(1) 掌握單管放大電路的靜態(tài)工作點(diǎn)和電壓放大倍數(shù)的測(cè)量方法。 (2) 了解電路中元件的參數(shù)改變對(duì)靜態(tài)工作點(diǎn)...... 第一次實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告 班級(jí):2009211307 姓名:呂博文 學(xué)號(hào):09211297 分工情況:個(gè)人一組 完成日期:11月5日 斐波那契數(shù)列遞歸和迭代算法 一、問題描述 分別寫出下列函數(shù)的遞歸算法和...... C語(yǔ)言鏈表的概念
在*中采用了動(dòng)態(tài)分配的辦法為一個(gè)結(jié)構(gòu)分配內(nèi)存空間。每一次分配一塊空間可用來(lái)存放一個(gè)學(xué)生的數(shù)據(jù),我們可稱之為一個(gè)結(jié)點(diǎn)。有多少個(gè)學(xué)生就應(yīng)該申請(qǐng)分配多少...... #include #include #define OVERFLOW -2 #define ERROR 0 #define OK 1 typedef int status; //雙向循環(huán)鏈表的存儲(chǔ)結(jié)構(gòu) typedef struct DuLNode { int data; int Length; s......第三篇:2012《數(shù)據(jù)結(jié)構(gòu)》上機(jī)實(shí)驗(yàn)報(bào)告 鏈表
第四篇:實(shí)驗(yàn)四 單鏈表及其應(yīng)用(參考程序)
第五篇:WEB程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告-15單
聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。 職工信息管理系統(tǒng) 單鏈表實(shí)現(xiàn) C語(yǔ)言源程序(范文)
C語(yǔ)言課程設(shè)計(jì) 職工信息管理系統(tǒng) 單鏈表實(shí)現(xiàn)程序源代碼
學(xué)生管理系統(tǒng)學(xué)生鏈表
單臂路由實(shí)驗(yàn)報(bào)告[小編整理]
單管共射放大電路仿真--實(shí)驗(yàn)報(bào)告
斐波那契數(shù)列遞歸和迭代&循環(huán)鏈表隊(duì)列初始化實(shí)驗(yàn)報(bào)告
C語(yǔ)言鏈表的概念
雙向循環(huán)鏈表的創(chuàng)建