久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

數據結構實驗報告三線性表的鏈式存儲(5篇范文)

時間:2019-05-12 02:20:27下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《數據結構實驗報告三線性表的鏈式存儲》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《數據結構實驗報告三線性表的鏈式存儲》。

第一篇:數據結構實驗報告三線性表的鏈式存儲

實驗報告三 線性表的鏈式存儲

班級: 2010XXX 姓名: HoogLe 學號: 2010XXXX 專業: XXXX

2858505197@qq.com

一、實驗目的:

(1)掌握單鏈表的基本操作的實現方法。(2)掌握循環單鏈表的基本操作實現。(3)掌握兩有序鏈表的歸并操作算法。

二、實驗內容:(請采用模板類及模板函數實現)

1、線性表鏈式存儲結構及基本操作算法實現

[實現提示](同時可參見教材p64-p73頁的ADT描述及算法實現及ppt)函數、類名稱等可自定義,部分變量請加上學號后3位。也可自行對類中所定義的操作進行擴展。所加載的庫函數或常量定義: #include using namespace std;(1)單鏈表存儲結構類的定義: template class LinkList{ public: LinkList();//初始化帶頭結點空單鏈表構造函數實現

LinkList(T a[],int n);//利用數組初始化帶頭結點的單鏈表構造函數實現

~LinkList();int length();//求單鏈表表長算法

T get(int i);//獲得單鏈表中第i個結點的值算法

int locate(T temp);void insert(int i,T temp);//在帶頭結點單鏈表的第i個位置前插入元素e算法

T Delete(int i);//在帶頭結點單鏈表中刪除第i個元素算法

void print();//遍歷單鏈表元素算法

bool isEmpty();//判單鏈表表空算法

void deleleAll();//刪除鏈表中所有結點算法(這里不是析構函數,但功能相同)private: Node *head;};(2)初始化帶頭結點空單鏈表構造函數實現 輸入:無

前置條件:無

動作:初始化一個帶頭結點的空鏈表 輸出:無

后置條件:頭指針指向頭結點。

//初始化帶頭結點空單鏈表構造函數實現 template LinkList::LinkList(){ head = new Node;head->next = NULL;}

(3)利用數組初始化帶頭結點的單鏈表構造函數實現 輸入:已存儲數據的數組及數組中元素的個數 前置條件:無

動作:利用頭插或尾插法創建帶頭結點的單鏈表 輸出:無

后置條件:頭指針指向頭結點,且數組中的元素為鏈表中各結點的數據成員。//利用數組初始化帶頭結點的單鏈表構造函數實現 template LinkList::LinkList(T a[],int n){ head=new Node;head->next=NULL;for(int i=0;i *s=new Node;s->data=a[i];s->next=head->next;head->next=s;} }(4)在帶頭結點單鏈表的第i個位置前插入元素e算法 輸入:插入位置i,待插入元素e 前置條件:i的值要合法

動作:在帶頭結點的單鏈表中第i個位置之前插入元素e 輸出:無

后置條件:單鏈表中增加了一個結點

//在帶頭結點單鏈表的第i個位置前插入元素e算法 template void LinkList::insert(int i,T temp){ Node *p = head;int count = 0;while(p&&count

p=p->next;

count++;} if(p==NULL)cout<<“i不合法,越界!”;else{

Node *s = new Node;

s->data = temp;

s->next = p->next;

p->next = s;} }(5)在帶頭結點單鏈表中刪除第i個元素算法 輸入:刪除第i個結點,待存放刪除結點值變量e 前置條件:單鏈表不空,i的值要合法

動作:在帶頭結點的單鏈表中刪除第i個結點,并返回該結點的值(由e傳出)。輸出:無

后置條件:單鏈表中減少了一個結點

//在帶頭結點單鏈表中刪除第i個元素算法 template T LinkList::Delete(int i){ Node *p = head;int count = 0;while(p&&count

p=p->next;

count++;} if(p==NULL)cout<<“i不合法,越界!”;else{

Node *s = p->next;

T x= s->data;

p->next = s->next;

return x;} }(6)遍歷單鏈表元素算法 輸入:無

前置條件:單鏈表不空

動作:遍歷輸出單鏈表中的各元素。輸出:無

后置條件:無

//遍歷單鏈表元素算法 template void LinkList::print(){ Node *p = head->next;while(p){

cout<

data<<“ ”;

p=p->next;} cout<

(7)求單鏈表表長算法。輸入:無

前置條件:無

動作:求單鏈表中元素個數。輸出:返回元素個數 后置條件:無

//求單鏈表表長算法 template int LinkList::length(){ Node *p = head;int count = 0;while(p){

p=p->next;

count++;} return--count;}

(8)判單鏈表表空算法 輸入:無

前置條件:無

動作:判表是否為空。

輸出:為空時返回1,不為空時返回0 后置條件:無 //判斷非空

template bool LinkList::isEmpty(){ Node *p = head->next;if(p)return true;else return false;}

(9)獲得單鏈表中第i個結點的值算法 輸入:無

前置條件:i不空,i合法 動作:找到第i個結點。

輸出:返回第i個結點的元素值。后置條件:無

//獲得單鏈表中第i個結點的值算法 template T LinkList::get(int i){ Node *p = head;int count = 0;while(p&&count

p=p->next;

count++;} if(p==NULL)cout<<“i不合法,越界!”;else{

return p->data;} }

(10)刪除鏈表中所有結點算法(這里不是析構函數,但功能相同)輸入:無

前置條件:單鏈表存在

動作:清除單鏈表中所有的結點。輸出:無

后置條件:頭指針指向空 //刪除所有元素 template void LinkList::deleleAll(){ Node *p = head;while(p){

Node *t=p;

p=p->next;

t->next=NULL;} }

(11)上機實現以上基本操作,寫出main()程序: 參考p72 void main(){ int a[10]={1,2,3,4,5,6,7,8,9,0};//測試帶參數的構造函數(前端插入!)

LinkList list1(a,10);//測試插入

if(list1.isEmpty()){ cout<<“鏈表不為空!”<

cout<<“鏈表為空!”<

2、參考單鏈表操作定義與實現,自行完成單循環鏈表的類的定義與相操作操作算法。template class LinkList{ public: LinkList(T a[],int n);//利用數組初始化帶頭結點的單循環鏈表構造函數實現

void insert(int i,T temp);//在帶頭結點單循環鏈表的第i個位置前插入元素e算法

T Delete(int i);//在帶頭結點單循環鏈表中刪除第i個元素算法

void print();//遍歷單循環鏈表元素算法 private: Node *head;int length;};(1)利用數組初始化帶頭結點的單循環鏈表構造函數實現 輸入:已存儲數據的數組及數組中元素的個數 前置條件:無

動作:利用頭插或尾插法創建帶頭結點的單循環鏈表 輸出:無

后置條件:頭指針指向頭結點,且數組中的元素為鏈表中各結點的數據成員,尾指針指向頭結點。

//利用數組初始化帶頭結點的單循環鏈表構造函數實現 template LinkList::LinkList(T a[],int n){ head=new Node;head->next= head;length = 0;for(int i=0;i *s=new Node;s->data=a[i];

s->next = head->next;head->next=s;

length++;} }

(2)在帶頭結點單循環鏈表的第i個位置前插入元素e算法 輸入:插入位置i,待插入元素e 前置條件:i的值要合法

動作:在帶頭結點的單循環鏈表中第i個位置之前插入元素e 輸出:無

后置條件:單循環鏈表中增加了一個結點

//在帶頭結點單循環鏈表的第i個位置前插入元素e算法 template void LinkList::insert(int i,T temp){ cout<length< *p = head;int count = 0;if(i>length)cout<<“i不合法,越界!”;else{

while(count

p=p->next;

count++;

}

Node *s = new Node;

s->data = temp;

s->next = p->next;

p->next = s;} }(3)在帶頭結點單循環鏈表中刪除第i個元素算法 輸入:刪除第i個結點,待存放刪除結點值變量e 前置條件:單循環鏈表不空,i的值要合法

動作:在帶頭結點的單循環鏈表中刪除第i個結點,并返回該結點的值(由e傳出)。輸出:無

后置條件:單循環鏈表中減少了一個結點

//在帶頭結點單循環鏈表中刪除第i個元素算法 template T LinkList::Delete(int i){ Node *p = head;int count = 0;

if(i>length)cout<<“i不合法,越界!”<

while(count

p=p->next;

count++;

}

Node *s = p->next;

T x= s->data;

p->next = s->next;

return x;} }

(4)遍歷單循環鏈表元素算法 輸入:無

前置條件:單循環鏈表不空

動作:遍歷輸出單循環鏈表中的各元素。輸出:無

后置條件:無

//遍歷單循環鏈表元素算法 template void LinkList::print(){ Node *p = head->next;while(p!=head){

cout<

data<<“ ”;

p=p->next;} cout<

(5)上機實現以上基本操作,寫出main()程序: void main(){ int a[10]={1,2,3,4,5,6,7,8,9,0};//測試帶參數的構造函數(前端插入!)

LinkList list1(a,10);list1.print();cout<<“測試插入”<

3、采用鏈式存儲方式,并利用單鏈表類及類中所定義的算法加以實現線性表La,Lb為非遞減的有序線性表,將其歸并為新線性表Lc,該線性表仍有序(未考慮相同時刪除一重復值)的算法。模板函數:

template void LinkList::addtwo(LinkList La,LinkList Lb){ Node *p1=La.head->next;Node *p2=Lb.head->next;int num=0;while(p1&&p2){

if(p1->data>p2->data)

{

this->insert(++num,p1->data);

p1=p1->next;

}

else{ this->insert(++num,p2->data);

p2=p2->next;

} } if(!p1){

p1=p2;} while(p1){

this->insert(++num,p1->data);

p1=p1->next;}

} void main(){ int a[5]={1,2,5,6,9};int b[5]={0,3,4,7,8};LinkList list1(a,5);LinkList list2(b,5);list1.print();list2.print();LinkList list3;list3.addtwo(list1,list2);list3.print();system(“pause”);} 粘貼測試數據及運行結果:

選做題:

1、按一元多項式ADT的定義,實現相關操作算法: ADT PNode is Data 系數(coef)指數(exp)指針域(next):指向下一個結點 Operation 暫無

end ADT PNode ADT Polynomial is Data PNode類型的頭指針。Operation

Polynomail 初始化值:無

動作:申請頭結點,由頭指針指向該頭結點,并輸入m項的系數和指數,建立一元多項式。

DestroyPolyn 輸入:無

前置條件: 多項式已存在 動作:消毀多項式。輸出:無

后置條件:頭指針指向空

PolyDisplay 輸入:無

前置條件: 多項式已存在,不為空 動作:輸出多項式各項系數與指數 輸出:無

后置條件:無 AddPoly 輸入:另一個待加的多項式

前置條件:一元多項式pa和pb已存在。動作及后置條件:完成多項式相加運算,(采用pa=pa+pb形式,并銷毀一元多項式pb)輸出:無

end ADT Polynomial

2、實現一元多項式的減法,操作描述如下: SubPoly 輸入:待減的多項式pb 前置條件:一元多項式pa和pb已存在。

動作及后置條件:完成多項式減法運算,即:pa=pa-pb,并銷毀一元多項式pb。輸出:無

3、參考P74-P79頁雙向鏈表的存儲結構定義及算法,編程實現雙向鏈表的插入算法和刪除算法。

三、心得體會:(含上機中所遇問題的解決辦法,所使用到的編程技巧、創新點及編程的心得)

第二篇:線性表的鏈式存儲結構實驗報告

實驗報告

課程名稱:數據結構與算法分析 實驗名稱:鏈表的實現與應用

實驗日期:2015.01.30 班級: 數媒1401 姓名: 范業嘉 學號 1030514108

一、實驗目的

掌握線性表的鏈式存儲結構設計與基本操作的實現。

二、實驗內容與要求

⑴定義線性表的鏈式存儲表示;

⑵基于所設計的存儲結構實現線性表的基本操作;

⑶編寫一個主程序對所實現的線性表進行測試;

⑷線性表的應用:①設線性表L1和L2分別代表集合A和B,試設計算法求A和B的并集C,并用

線性表L3代表集合C;②(選做)設線性表L1和L2中的數據元素為整數,且均已按值非遞減有序排列,試設計算法對L1和L2進行合并,用線性表L3保存合并結果,要求L3中的數據元素也按值非遞減有序排列。

⑸設計一個一元多項式計算器,要求能夠:①輸入并建立多項式;②輸出多項式;③執行兩個多項式相加;④執行兩個多項式相減;⑤(選做)執行兩個多項式相乘。

三、數據結構設計

1.按所用指針的類型、個數、方法等的不同,又可分為:

線性鏈表(單鏈表)

靜態鏈表

循環鏈表

雙向鏈表

雙向循環鏈表

2.用一組任意的存儲單元存儲線性表中數據元素,用指針來表示數據元素間的邏輯關系。

四、算法設計

1.定義一個鏈表

void creatlist(Linklist &L,int n){ int i;Linklist p,s;L=(Linklist)malloc(sizeof(Lnode));p=L;L->next=NULL;for(i=0;i

s=(Linklist)malloc(sizeof(Lnode));

scanf(“%d”,&s->data);

s->next=NULL;

p->next=s;

p=s;

/ 8

} } 2.(1)兩個鏈表的合并

void Mergelist(Linklist &La,Linklist &Lb,Linklist &Lc){ Linklist pa,pb,pc;pa=La->next;pb=Lb->next;Lc=pc=La;while(pa&&pb){

if(pa->data<=pb->data)

{pc->next=pa;pc=pa;pa=pa->next;}

else {pc->next=pb;pc=pb;pb=pb->next;} } pc->next=pa?pa:pb;free(Lb);}(2)兩個鏈表的并集

Linklist unionlist(Linklist &La,Linklist &Lb){ Linklist p1,p2,head,q,s;int flag;head=q=(Linklist)malloc(sizeof(Lnode));p1=La->next;while(p1){

flag=0;

p2=Lb->next;

while(p2)

{

if(p1->data==p2->data)

{

flag=1;

break;

}

p2=p2->next;

}

if(flag==0)

{

s=(Linklist)malloc(sizeof(Lnode));

s->data=p1->data;

q->next=s;

q=s;

}

p1=p1->next;/ 8

}

q->next=Lb->next;return head;

}

3.(1)一元多項式的加法

List addpoly(List pa,List pb)

//一元多項式的加法 { int n;List pc,s,p;pa=pa->next;pb=pb->next;pc=(List)malloc(sizeof(struct Linklist));pc->next=NULL;p=pc;while(pa!=NULL&&pb!=NULL){

if(pa->expn>pb->expn)

{

s=(List)malloc(sizeof(struct Linklist));

s->expn=pa->expn;

s->coef=pa->coef;

s->next=NULL;

p->next=s;

p=s;

pa=pa->next;

}

else if(pa->expn

expn)

{

s=(List)malloc(sizeof(struct Linklist));

s->expn=pb->expn;

s->coef=pb->coef;

s->next=NULL;

p->next=s;

p=s;

pb=pb->next;

}

else

{

n=pa->coef+pb->coef;

if(n!=0)

{

s=(List)malloc(sizeof(struct Linklist));

s->expn=pa->expn;/ 8

s->coef=n;

s->next=NULL;

p->next=s;

p=s;

}

pb=pb->next;

pa=pa->next;

} } while(pa!=NULL){

s=(List)malloc(sizeof(struct Linklist));

s->expn=pa->expn;

s->coef=pa->coef;

s->next=NULL;

p->next=s;

p=s;

pa=pa->next;} while(pb!=NULL){

s=(List)malloc(sizeof(struct Linklist));

s->expn=pb->expn;

s->coef=pb->coef;

s->next=NULL;

p->next=s;

p=s;

pb=pb->next;} return pc;}

(2)一元多項式的減法

List subpoly(List pa,List pb)

//一元多項式的減法 { int n;List pc,s,p;pa=pa->next;pb=pb->next;pc=(List)malloc(sizeof(struct Linklist));pc->next=NULL;p=pc;while(pa!=NULL&&pb!=NULL){

if(pa->expn>pb->expn)

/ 8

{

s=(List)malloc(sizeof(struct Linklist));

s->expn=pa->expn;

s->coef=pa->coef;

s->next=NULL;

p->next=s;

p=s;

pa=pa->next;} else if(pa->expn

expn){

s=(List)malloc(sizeof(struct Linklist));

s->expn=pb->expn;

s->coef=-pb->coef;

s->next=NULL;

p->next=s;

p=s;

pb=pb->next;} else {

n=pa->coef-pb->coef;

if(n!=0)

{

s=(List)malloc(sizeof(struct Linklist));

s->expn=pa->expn;

s->coef=n;

s->next=NULL;

p->next=s;

p=s;

}

pb=pb->next;

pa=pa->next;} } while(pa!=NULL){ s=(List)malloc(sizeof(struct Linklist));s->expn=pa->expn;s->coef=pa->coef;s->next=NULL;p->next=s;p=s;pa=pa->next;} / 8

while(pb!=NULL){

s=(List)malloc(sizeof(struct Linklist));

s->expn=pb->expn;

s->coef=-pb->coef;

s->next=NULL;

p->next=s;

p=s;

pb=pb->next;} return pc;}(3)一元多項式的乘法

void mulpolyn(polynomail pa,polynomail pb,polynomail &pc){

LNode *p,*q,*s,*hc;p=pa->next;q=pb->next;hc=pc;while(p!=NULL){

while(q!=NULL)

{

s=(polynomail)malloc(sizeof(LNode));

hc->next=s;

hc=hc->next;

hc->coef=q->coef*p->coef;

hc->expn=q->expn+p->expn;

q=q->next;

}

p=p->next;

q=pb->next;} hc->next=NULL;}

/ 8

五、測試結果

2.3.7 / 8

六、心得體會(包括對于本次實驗的小結,實驗過程中碰到的問題等)

1.首先書上給的鏈表輸入是倒序的,寫的時候想都沒想就抄上去了,結果運行時發現問題,可是上網百度依然沒有把問題解決,導致最后輸出鏈表倒序的,并且鏈表的合并并集依舊是倒序的。

2.當寫一元多項式的加減時,前提是弄清楚各種情況,系數相同時就相加減,系數不同就保留原有多項式;當系數相加減為0時,就free這個節點。在做減法時,我考慮到了減數與被減數之間的關系。

3.在做多項式時,我準備按照書上的算法一個一個寫小函數,結果到最后發現寫不下去了,就去問問同學和上網看看,結果感覺寫這個數據結構的程序其實不必想麻煩了,只是指針,數組的高級運用。

/ 8

第三篇:數據結構實驗報告二線性表的順序存儲

實驗報告二 線性表的順序存儲

班級: 2010XXX 姓名: HoogLe 學號: 2010XXXX 專業: XXXX

2858505197@qq.com

一、實驗目的:

(1)掌握順序表的基本操作的實現方法。

(2)應用順序表的基本算法實現集合A=AUB算法。

(3)應用順序表的基本算法實現兩有序順序表的歸并算法。

二、實驗內容:

1、線性表順序存儲結構的基本操作算法實現(要求采用類模板實現)

[實現提示](同時可參見教材p5822-p60頁算法、ppt)函數、類名稱等可自定義,部分變量請加上學號后3位。庫函數載和常量定義:(代碼)#include using namespace std;const int MaxSize=100;

(1)順序表存儲結構的定義(類的聲明):(代碼)

template //定義模板類SeqList class SeqList { public: SeqList();//無參構造函數

SeqList(datatype a[ ], int n);//有參構造函數 ~SeqList(){};//析構函數為空 int Length();//求線性表的長度

datatype Get(int i);//按位查找,取線性表的第i個元素 int Locate(datatype item);//查找元素item void Insert(int i, datatype item);//在第i個位置插入元素item datatype Delete(int i);//刪除線性表的第i個元素 void display();//遍歷線性表,按序號依次輸出各元素 private: datatype data[MaxSize];//存放數據元素的數組 int length;//線性表的長度 };

(2)初始化順序表算法實現(不帶參數的構造函數)/* *輸 入:無

*前置條件:順序表不存在 *功 能:構建一個順序表 *輸 出:無

*后置條件:表長為0 */ 實現代碼:

template SeqList:: SeqList(){ length=0;}

(3)順序表的建立算法(帶參數的構造函數)

/* *輸 入:順序表信息的數組形式a[],順序表長度n *前置條件:順序表不存在

*功 能:將數組a[]中元素建為長度為n的順序表 *輸 出:無

*后置條件:構建一個順序表 */ 實現代碼:

template SeqList:: SeqList(datatype a[], int n){ if(n>MaxSize){

cout<<“數組元素個數不合法”<

data[i]=a[i];length=n;}(4)在順序表的第i個位置前插入元素e算法 /* *輸 入:插入元素e,插入位置i *前置條件:順序表存在,i要合法

*功 能:將元素e插入到順序表中位置i處 *輸 出:無

*后置條件:順序表插入新元素,表長加1 */ 實現代碼:

template void SeqList::Insert(int i, datatype item){ int j;if(length>=MaxSize){

cout<<“溢出”<length+1){

cout<<“i不合法!”<=i;j--)

data[j]=data[j-1];data[i-1]=item;length++;}(5)刪除線性表中第i個元素算法 /* *輸 入:要刪除元素位置i *前置條件:順序表存在,i要合法

*功 能:刪除順序表中位置為i的元素 *輸 出:無

*后置條件: 順序表冊除了一個元素,表長減1 */ 實現代碼:

template datatype SeqList::Delete(int i){ int item,j;if(length==0){

cout<<“表為空,無法刪除元素!”<length){

cout<<“i不合法!”<

for(j=i;j

data[j-1]=data[j];//注意數組下標從0記

length--;return item;}(6)遍歷線性表元素算法 /* *輸 入:無

*前置條件:順序表存在 *功 能:順序表遍歷 *輸 出:輸出所有元素 *后置條件:無 */ 實現代碼:

template void SeqList::display(){ if(length==0){

cout<<“表為空,無法輸出!”<

cout<

(7)獲得線性表長度算法 /* *輸 入:無

*前置條件:順序表存在 *功 能:輸出順序表長度 *輸 出:順序表長度 *后置條件:無 */ 實現代碼:

template int SeqList::Length(){ return Length;}

(8)在順序線性表中查找e值,返回該元素的位序算法 /* *輸 入:查詢元素值e *前置條件:順序表存在

*功 能:按值查找值的元素并輸出位置 *輸 出:查詢元素的位置 *后置條件:無 */ 實現代碼:

template int SeqList::Locate(datatype item){ for(int i=0;i

//下標為i的元素等于item,返回其序號i+1

return 0;//查找失敗 }

(9)獲得順序線性表第i個元素的值 /* *輸 入:查詢元素位置i *前置條件:順序表存在,i要合法

*功 能:按位查找位置為i的元素并輸出值 *輸 出:查詢元素的值 *后置條件:無 */ 實現代碼:

template datatype SeqList::Get(int i){ if(i<0||i>length){

cout<<“i不合法!”<

(10)判表空算法 /* *輸 入:無 *前置條件:無

*功 能:判表是否為空

*輸 出:為空返回1,不為空返回0 *后置條件:無 */ 實現代碼:

template bool SeqList::Empty(){ if(length==0){

return 1;} else {

return 0;} }

(11)求直接前驅結點算法 /* *輸 入:要查找的元素e,待存放前驅結點值e1

*前置條件:無

*功 能:查找該元素的所在位置,獲得其前驅所在位置。*輸 出:返回其前驅結點的位序。*后置條件:e1值為前驅結點的值 */ 實現代碼:

template int SeqList::Pre(datatype item){ int k=Locate(item)-1;if(k>0)

return k;else {

cout<<“無前驅結點!”<

return 0;} }(12)求直接后繼結點算法 /* *輸 入:要查找的元素e,待存放后繼結點值e1 *前置條件:無

*功 能:查找該元素的所在位置,獲得其后繼所在位置。*輸 出:返回其后繼結點的位序。*后置條件:e1值為后繼結點的值 */ 實現代碼:

template int SeqList::Suc(datatype item){ int k=Locate(item)+1;if(k>length){

cout<<“無后繼結點!”<

return k;} }

上機實現以上基本操作,寫出main()程序: void main(){ SeqList Seq;//創建

if(Seq.Empty()){

cout<<“線性表為空!”<

} Seq.Insert(1,1);Seq.Insert(2,2);Seq.Insert(3,3);Seq.Insert(4,4);Seq.Insert(5,5);//插入元素操作

cout<<“輸出插入的五個元素:”<

cout<

cout<<“2是第”<

cout<<“第五個元素是:”<

cout<<“線性表的長度為:”<

Seq.Delete(3);//刪除元素

cout<<“刪除第三個元素后的線性表為:”<

cout<

cout<<“元素2前驅結點的數值為:”<

cout<<“元素4后繼結點的位置為:”<

cout<<“元素4后繼結點的數值為:”<

要求對每個算法都加以測試,判斷是否正確;并測試不同類型數據的操作。粘貼測試數據及運行結果:

2、用以上基本操作算法,實現A=AUB算法。(利用函數模板實現)/* *輸 入:集合A,集合B *前置條件:無

*功 能:實現A=AUB *輸 出:無

*后置條件:A中添加了B中的元素。*/

實現代碼:

template SeqList SeqList::Add(SeqList& item){ if(item.Empty())

return *this;else {

int k=item.Length();

int num=this->Length();

for(int i=1;i<=k;i++)

{

for(int j=0;j

if(data[j]==item.Get(i))

{

break;

}

else if(num-1==j&&data[num-1]!=item.Get(i))

{

this->Insert(++num,item.Get(i));

}

}

return *this;} } void main(){ SeqList A,B;cout<<“A∪B的結果是:”<

B.Insert(1,2);B.Insert(2,6);B.Insert(3,1);B.Insert(4,8);B.Insert(5,9);//插入集合B中元素

A.Add(B);A.display();cout<

3、對以上順序表類中的基本操作算法適當加以補充,實現向一個有序的(非遞減)的順序表中插入數據元素e算法。/* *輸 入:插入元素e *前置條件:順序表已有序

*功 能:將元素e插入到順序表中適當的位置,使順序表依然有序 *輸 出: 無

*后置條件:有序順序表插入了新元素,且表長加1。*/ 實現代碼:

template void SeqList::orderInsert(datatype item){ int num=this->Length();for(int i=0;i

if((data[i]item))

{

for(int k=num;k>i;k--)

data[k]=data[k-1];

data[i+1]=item;

length++;

break;

}

if(data[i]>item)

{

for(int k=num;k>i;k--)

data[k]=data[k-1];

data[i]=item;

length++;

break;

} } } void main(){ SeqList A,B;A.Insert(1,3);A.Insert(2,5);A.Insert(3,6);A.Insert(4,8);A.Insert(5,10);//插入順序表

cout<<“原順序表為:”<

cout<

cout<<“插入新元素后的順序表為:”<

4、算法實現:La,Lb為非遞減的有序線性表,將其歸并為Lc,該線性表仍有序(未考慮相同時刪除一重復值)(利用函數類板實現)MergeList: /* *輸 入:有序線性表La,有序線性表Lb *前置條件:順序表已有序

*功 能:將兩線性表歸并,不去掉相同元素 *輸 出: 返回一個新的有序線性表Lc *后置條件:無 */ 實現代碼:

template SeqList SeqList::ElseAdd(SeqList Seq1,SeqList Seq2){ int num=Seq2.Length();for(int i=0;i<=num;i++){

Seq1.orderInsert(Seq2.Get(i));} return Seq1;} void main(){ SeqList La,Lb,Lc;La.Insert(1,2);La.Insert(2,4);La.Insert(3,6);La.Insert(4,8);//插入La cout<<“La中元素為:”<

cout<<“合并后的Lc為:”<

cout<

粘貼測試數據及運行結果:

三、心得體會:(含上機中所遇問題的解決辦法,所使用到的編程技巧、創新點及編程的心得)

第四篇:數據結構線性表實驗報告

實驗報告

課程名:數據結構

實驗名:線性表及其操作 姓名: 班級: 學號:

撰寫時間:2014.09.24

一 實驗目的與要求

1.掌握線性表的實現

2.掌握線性表的基本操作的實現

二 實驗內容

? 分別完成線性表的順序表示及鏈式表示

? 在兩種表示上, 分別實現一些線性表的操作, 至少應該包括 – 在第i個位置插入一個元素 – 刪除第i個元素 – 返回線性表長

– 返回第i個元素的值

三 實驗結果與分析

#include #include //---------線性表鏈式表示-----------struct V//聲明一個結構體類型struct V { int value;struct V * next;//定義結構體變量 };void PrintLink(struct V*p)//定義一個結構體指針 { while(p!=NULL)//只要指針指向的變量不為NULL;就會一直循環鏈表指向下一個結構體

{

printf(“%d, ”,(*p).value);

p=(*p).next;//指針指向下一個結構體

} printf(“n”);} void Link(){

struct V*head;head=(struct V*)malloc(sizeof(struct V));//開辟一個長度為size的內存

(*head).value=-100;//表頭為-100(*head).next=NULL;printf(“------------線性表鏈式表示------------n”);

int i,n=10;struct V*p=head;printf(“10個數據:n”);for(i=0;i

(*p).next=(struct V*)malloc(sizeof(struct V));

p=(*p).next;

(*p).value=2*i;

(*p).next=NULL;} PrintLink(head);//調用PrintLink函數

printf(“刪除第四個數據:n”);int k=4;p=head;for(i=1;i

p=(*p).next;} struct V*temp=(*p).next;//k表示插入和刪除的位置

(*p).next=(*temp).next;free(temp);PrintLink(head);printf(“插入第十個數據:n”);

k=10;p=head;for(i=1;i

p=(*p).next;} temp=(*p).next;(*p).next=(struct V*)malloc(sizeof(struct V));(*(*p).next).value=-99;(*(*p).next).next=temp;PrintLink(head);}

//---------線性表順序表示-----------void seq1(){ int i,n=10,k=4;int a[10];//---------輸出數組元素------------printf(“-------------線性表順序表示---------n”);for(i=0;i

a[i]=i;} printf(“數組元素為:n”);for(i=0;i

printf(“%3d”,a[i]);} printf(“n”);//--------插入一個數組元素---------int m=n+1,j=12;//插入元素12 int b[20];for(i=0;i

if(i

{

b[i]=a[i];

}

else if(i==k)

{b[i]=j;}

else

{b[i]=a[i-1];} } printf(“輸出插入一個元素的數組:n”);for(i=0;i

{

if(i

{c[i]=a[i];}

else

{c[i]=a[i+1];} } printf(“輸出刪除一個元素的數組:n”);for(i=0;i

printf(“數組元素為:n”);for(i=1;i<=a[0];i++){a[i]=i;} for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);//-----在k位置插入一個元素------------for(i=a[0];i>=k;i--){a[i+1]=a[i];} a[k]=-100;++a[0];for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);//-------在k---------------for(i=0;i>k;i++){a[i]=a[i+1];} a[k]=-1;a[0]=n;--a[0];for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);

} int main(int argc,char *argv[]){ seq1();seq2();Link();return 0;}

圖1:實驗結果截圖

實驗分析:已在程序中按規定格式標注。

第五篇:福州大學數據結構實驗報告-線性表

數據結構原理實驗報告

學號:

姓名:

線性表

一、問題描述 1.實現ADT表

2.設表的Reverse運算將表中元素的次序反轉。擴充用數組實現表的結構List,增加函數Reverse(L),將表L中元素的次序反轉,并要求就地實現Reverse運算。

二、算法描述

從i=0開始,將表中第N個元素與N-i-1個元素調換即可

三、核心代碼

void ReverseList(List L){

ListItem tmp;int i;for(i=0;in/2;i++){

} tmp = L->table[i];L->table[i] = L->table[L->n-1-i];L->table[L->n-1-i] = tmp;}

四、運行結果

下載數據結構實驗報告三線性表的鏈式存儲(5篇范文)word格式文檔
下載數據結構實驗報告三線性表的鏈式存儲(5篇范文).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    數據結構--實驗報告 線性表的基本操作

    } (一) 單鏈表的基本操作 #include using namespace std; #define true 1 #define false 0 #define ok 1 #define error 0 #define overflow -2 typedef int Status; typede......

    數據結構線性表試驗報告(最終定稿)

    線性表上機實習1、實驗目的 (1)熟悉將算法轉換為程序代碼的過程。 (2)了解順序表的邏輯結構特性,熟練掌握順序表存儲結構的C語言描述方法。 (3)熟練掌握順序表的基本運算:查找、插......

    數據結構實驗報告

    注意:實驗結束后提交一份實驗報告電子文檔 電子文檔命名為“學號+姓名”,如:E01214058宋思怡 《數據結構》實驗報告(一) 學號:姓名:專業年級: 實驗名稱:線性表 實驗日期:2014年4月14日......

    數據結構實驗報告

    南京信息工程大學實驗(實習)報告 實驗(實習)名稱數據結構實驗(實習)日期 2011-11-2得分指導教師周素萍 系公共管理系專業信息管理與信息系統年級10級班次1姓名常玲學號20102307003......

    數據結構實驗報告

    數據結構實驗報告 一. 題目要求 1)編程實現二叉排序樹,包括生成、插入,刪除; 2)對二叉排序樹進行先根、中根、和后根非遞歸遍歷; 3)每次對樹的修改操作和遍歷操作的顯示結果都需要在......

    數據結構實驗報告

    實驗報告4 排序 一、實驗目的 1、掌握常用的排序方法,并掌握用高級語言實現排序算法的方法。 2、深刻理解排序的定義和各種排序方法的特點,并能加以靈活應用。 3、了解各種方......

    數據結構實驗報告

    數 據 結 構 實 驗 報 告 1.問題描述 為某個單位建立一個員工通訊錄管理系統,可以方便地查詢每一個員工的辦公室電話號碼、手機號碼及電子郵箱。 2. 設計分析 在本設計中,整......

    數據結構實驗報告

    數據結構實驗報告 第一次實驗 學號:20141060106 姓名:葉佳偉 一、實驗目的 1、復習變量、數據類型、語句、函數; 2、掌握函數的參數和值; 3、了解遞歸。 二、實驗內容 1、(必做......

主站蜘蛛池模板: 亚洲男人的天堂在线播放| 亚洲精品乱码久久久久久日本| 国产精品人人妻人人爽| 人人莫人人擦人人看| 亚洲精品suv精品一区二区| 精品人妻伦一二三区久久| 国内精品伊人久久久久777| 亚洲色大成网站www久久九九| 亚洲最大综合久久网成人| 少妇无码精油按摩专区| 国产av一区二区三区天堂综合网| 无码精品人妻一区二区三区漫画| 成 人 网 站 免 费 av| 久久久久99精品国产片| 国产精品麻豆成人av网| 国产午夜免费高清久久影院| 国产精品久久福利新婚之夜| 午夜福利伦伦电影理论片在线观看| 亚洲欧美日韩精品久久亚洲区| 欧美性大战久久久久久久| 久久精品人成免费| 国产精品成人片在线观看| 极品粉嫩嫩模大尺度无码视频| 国产午夜高潮熟女精品av软件| 国内精品国语自产拍在线观看| 婷婷五月综合色中文字幕| 成人免费视频一区二区三区| 97超级碰碰碰久久久久| 92午夜少妇极品福利无码电影| 无码成人av在线一区二区| 日本三级在线播放线观看免| 亚洲a∨无码国产精品久久网| 中文字幕乱码熟妇五十中出| 国产成人综合久久精品av| 人妻精品久久无码区| 美女18禁一区二区三区视频| 男插女高潮一区二区| 国产啪精品视频网站免费尤物| 国产无套内射又大又猛又粗又爽| 久久久久久久人妻无码中文字幕爆| 国产中年熟女高潮大集合|