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

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

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

第一篇:數據結構線性表試驗報告

線性表上機實習

1、實驗目的

(1)熟悉將算法轉換為程序代碼的過程。

(2)了解順序表的邏輯結構特性,熟練掌握順序表存儲結構的C語言描述方法。

(3)熟練掌握順序表的基本運算:查找、插入、刪除等,掌握順序表的隨機存取特性。(4)了解線性表的鏈式存儲結構,熟練掌握線性表的鏈式存儲結構的C語言描述方法。(5)熟練掌握線性鏈表(單鏈表)的基本運算:查找、插入、刪除等,能在實際應用中靈活選擇適當的鏈表結構。

2、實驗要求

(1)熟悉順序表的插入、刪除和查找。(2)熟悉單鏈表的插入、刪除和查找。

3、實驗內容: ① 順序表

(1)抽象數據類型定義

typedef struct {

TypeData data[maxsize];

//容量為maxsize的靜態順手表

int n;

//順序表中的實際元素個數

}SeqList;

//靜態順序表的定義

在本次實驗中,首先建立一個空的靜態順序表,然后鍵盤輸入數據存入表中,然后進入菜單選擇界面,通過不同的數字輸入,實現對順序表,刪除,插入,查找,顯示等操作。

(2)存儲結構定義及算法思想

在順序表結構體的定義中,typedef int TypeData 為整型,存儲結構如下:

for(n=0;n

cout<<“請輸入線性表數據”<

cin>>L.data[n];

//順序將數據存入順序表

}

//其他存儲與此類似,都是直接賦值與數組的某一位

插入版塊子函數:

void insert(SeqList &L)

//插入數據 {

int a,b,c,k;

cout<<“請輸入插入的數及其插入的位置”<

cin>>a>>b;

if(b<=0||b>(L.n+1)){cout<<“不能在該位置插入”<

k=L.data[b-1];L.data[b-1]=a;c=L.n;L.n=L.n+1;

while(c>b){

L.data[c]=L.data[c-1];c--;

//通過循環,實現插入位置后的數據挨個往后移動一位

}

L.data[b]=k;} 順序表的插入與刪除操作類似,在插入與刪除后,都要循環調整后面數組的每一位元素,同時記錄數據元素的長度的標示符也要跟著改變。顯示操作是通過循環實現表中第一個元素到最后一個元素的輸出,查找操作是直接取數組中的查找位輸出。

(3)實驗結果與分析

② 單鏈表

(1)抽象數據類型定義

typedef struct node{ DataType data;

//鏈表的數據類型

struct node *link;

//鏈表的結點指針

}linknode,*linklist;

//定義了結構體linklode和結構體指針linklist

在本次實驗中,首先程序自己建立一個空的頭結點,通過菜單的功能選擇“添加鏈表數據”可自由添加鏈表的節點數及元素值。在菜單選擇中,有“添加鏈數據”,“插入鏈表數據”,“刪除鏈表數據”,“查找鏈表數據”和“顯示鏈表數據”功能,選擇不能的功能選擇就能實現不同的操作。其中“添加鏈表數據”可反復批量輸入鏈表數據。

(2)存儲結構定義及算法思想

在單鏈表中,typedef int DataType;DataType data;定義鏈表存儲數據位整型。存儲結構如下:

while(p->link!=NULL){ p=p->link;

k++;

//首先找到單鏈表的最后結點(如果是只有頭結點

} 的單鏈表則直接跳過),以便后面接著輸入數據

for(int i=0;i

{ cout<<“請輸入數據”<

//開辟新的結點空間并轉化為linklist指針型

cin>>q->data;

q->link=p->link;

//將前面一個結點的指向(及NULL)賦給新開辟的結點的指向

p->link=q;

//將插入點前面一個結點指向新開辟的的結點

p=q;

//將指明的最后一個一個結點向后移1位到最后一位,以便后面接著輸入

}

刪除結點子函數:

void delate(linklist &l){

//刪除單鏈表數據

linklist p;int m,n,i=0;

cout<<“請輸入想要刪除的結點位置”<

cin>>m;

p=l;

//將頭結點賦給轉移指針p

while(p&&i

//查找刪除結點的位置

p=p->link;

//當在單鏈表中間已查到刪除結點或p=NULL時跳出循環

i++;

} if(p==NULL){

//當p=NULL跳出循環時,表明鏈表中沒有該結點

cout<<“該結點不存在,刪除錯誤”<

}

n=p->link->data;//找到刪除接結點將數據取出并顯示出來(找結點時是找的前一個結點)

cout<<“被刪除的結點元素為: ”<

p->link=p->link->link;

//將刪除結點的前后結點鏈接起來

}

鏈表的刪除,插入操作是類似的,要考慮到加入或減少一個結點后,前后結點的鏈接關系,以及刪除或插入的是最后一個結點時,新空間的開辟與結點收尾等問題。其中刪除功能的一部分就是查找功能,顯示功能也是從鏈表的頭結點遍歷至最后一個,依次輸出。

(4)實驗結果與分析

③ 心得體會

本次數據結構實習我收獲頗豐,以前學過c語言與c++也有經常上機,但以往都是偏向于程序整體的算法設計,沒有像這次的實習這樣是著重在線性表,鏈表結構的算法設計上面。這次上機實習,讓我更加熟練了結構體及結構體指針的用法,線性表的設計等等,同時在這次實習中,引用,指針,地址這三個的用法曾一度讓我混淆,在查閱書籍后才得以解決,也希望老師在課堂上有時間時給我們詳細講解一下,指針,地址,引用三者的使用。

附錄:

順序表源代碼: #include using namespace std;#define maxsize 50 typedef int TypeData;typedef struct { TypeData data[maxsize];int n;}SeqList;

void makeSeq(SeqList &L)// 據 { int m,n,k;cout<<“請輸入線性表長度”<>m;for(n=0;n>L.data[n];} L.n=m;cout<<“您輸入的線性表為:”<

輸入線性表數輸出線性表數據

void insert(SeqList &L)//插入數據 { int a,b,c,k;cout<<“請輸入插入的數及其插入的位置”<>a>>b;if(b<=0||b>(L.n+1)){cout<<“不能在該位置插入”<b){ L.data[c]=L.data[c-1];c--;} L.data[b]=k;} void delate(SeqList &L)//刪除數據 { int wei;cout<<“請輸入想要刪除數據的位置”<>wei;if(wei<1||wei>L.n){ cout<<“不能在該位置刪除”<>a;if(a<=0||a>(L.n)){cout<<“不能在該位置插入”<

cout<<“刪除 2”<>xuanze;switch(xuanze){ case 1: insert(L);break;case 2: delate(L);break;case 3: find(L);break;case 4: showSeq(L);break;default :break;} } }

單鏈表源代碼:

#include using namespace std;typedef int DataType;typedef struct node{ DataType data;struct node *link;}linknode,*linklist;

linklist chushihua(){ linklist L;L=(linklist)malloc(sizeof(linknode));L->link=NULL;cout<<“開辟空間成功,頭結點建立”<>a;linklist p,q;

p=l;while(p->link!=NULL){ p=p->link;k++;} for(int i=0;i>q->data;q->link=p->link;p->link=q;p=q;} } void show(linklist l){ cout<<“鏈表數據為:”<link;while(p!=NULL){ cout<

data<<“ ”;p=p->link;} cout<>m;linklist p;p=l->link;while(p&&ilink;i++;} if(!p){ cout<<“鏈表沒有這么長,查找錯誤”<data<

{ linklist p,q;int m,n,i=0;

cout<<“請輸入您要插入的結點位置及插入的數據”<>m>>n;p=l;while(p&&ilink;i++;} if(p==NULL){ cout<<“不能在該位置插入,插入錯誤”<

q=(linklist)malloc(sizeof(linknode));q->data=n;q->link=p->link;p->link=q;}

void delate(linklist &l){ linklist p;int m,n,i=0;cout<<“請輸入想要刪除的結點位置”<>m;p=l;while(p&&ilink;i++;} if(p==NULL){ cout<<“該結點不存在,刪除錯誤”<link->data;cout<<“被刪除的結點元素為: ”<link=p->link->link;} void main(){ linklist L;int select;

L=chushihua();

while(1){ cout<<“請選擇功能”<>select;switch(select){

case 1: shuru(L);break;case 2: insert(L);break;case 3: delate(L);break;case 4: find(L);break;case 5: show(L);break;default :break;} } }

第二篇:數據結構試驗報告

實驗一:ADT的類C描述向C程序的轉換實驗(2學時)

實驗目的:

(1)復習C語言的基本用法;

(2)學會用類C的語言對算法進行描述的方法,將類C算法轉換成C源程序的方法和過程;

(3)抽象數據類型的定義和表示、實現;

(4)加深對數據的邏輯結構和物理結構之間關系的理解;(5)初步建立起時間復雜度和空間復雜度的概念。實驗內容:(類C算法的程序實現)(1)輸入一組數據存入數組中,并將數據元素的個數動態地由輸入函數完成。求輸入數據的最大值、最小值,并通過函數參數返回所求結果; 實驗準備:

1)計算機設備;2)程序調試環境的準備,如TC環境;3)實驗內容的算法分析與代碼設計與分析準備。實驗步驟:

1.安裝TC并設置好環境,如果已安裝好,可以跳過此步; 2.錄入程序代碼并進行調試和算法分析;

對實驗內容(1)的操作步驟:1)用類C語言描述算法過程;2)用C語言環境實現該算法。

對實驗內容(2)的操作步驟:1)完成算法的C實現;2)分析其時間復雜度和空間復雜度。

3.編寫實驗報告。

實驗結果:// 動態分配數組空間 #include #include

int size,i;int *pArray;int *p;void malloc_size(){ pArray=(int *)malloc(size*(sizeof(int)));}

int input_size(){ printf(“please input the size:n”);printf(“size= ”);scanf(“%d”,&size);return 0;}

int input_data(){ printf(“please input the value:n”);for(i=0;i

printf(“pArray[%d]= ”,i);

scanf(“%d”,&pArray[i]);} return *pArray;}

int Compare(){ int x,y,i;x=y=p[0];for(i=0;i

if(x>=p[i])x=p[i];

if(y<=p[i])y=p[i];} printf(“min= %dt

max=%dn”,x,y);return 0;}

int Output_data(){ p=pArray;printf(“before ofpaixu :n”);for(i=0;i

printf(“%dt”,*pArray);

pArray++;} printf(“n”);return *pArray;}

void paixu(){ int x=0;int i,j;printf(“later of paixu:n”);for(i=0;i

for(j=i+1;j

{

if(p[i]>=p[j])

{

x=p[i];p[i]=p[j];p[j]=x;

}

}

printf(“%dt”,p[i]);} printf(“n”);}

void main(){ clrscr();input_size();malloc_size();input_data();Output_data();Compare();paixu();}

實驗結果:

實驗二

線性表及其基本操作實驗(2學時)實驗目的:

(1)熟練掌握線性表ADT和相關算法描述、基本程序實現結構;(2)以線性表的基本操作為基礎實現相應的程序;

(3)掌握線性表的順序存儲結構和動態存儲結構之區分。

實驗內容:(類C算法的程序實現,任選其一。具體要求參見教學實驗大綱)(1)一元多項式運算的C語言程序實現(加法必做,其它選做);(2)有序表的合并;(3)集合的并、交、補運算; 實驗準備:

1)計算機設備;2)程序調試環境的準備,如TC環境;3)實驗內容的算法分析與代碼設計與分析準備。實驗步驟:

1.錄入程序代碼并進行調試和算法分析; 2.編寫實驗報告。實驗結果://線性鏈表

#include #include #define M 6

typedef struct node { int data;struct node *next;}*Sqlist;

void Initlialize(Sqlist &L){ L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;}

int Getlength(Sqlist L){ int i=0;Sqlist p=L->next;while(p!=NULL){

i++;

p=p->next;}

return i;}

int Getelem(Sqlist L,int i){

int j=1,e;Sqlist p=L->next;while(j

p=p->next;

j++;}

e=p->data;printf(“第 %d 個元素是:%dn”,i,e);return 1;}

int Locatelem(Sqlist L,int x){

int i=0;Sqlist p=L->next;while(p!=NULL&&p->data!=x){

p=p->next;

i++;} if(p==NULL)

return 0;else

{

printf(“%d 是第 %d 個元素n”,x,i);return i;} }

void CreatlistF(Sqlist &L,int a[ ],int n){ Sqlist s;int i;L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;for(i=0;i

s=(Sqlist)malloc(sizeof(Sqlist));

} }

void CreatlistR(Sqlist &L,int a[],int n){

Sqlist s,r;int i;L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;r=L;for(i=0;i

s=(Sqlist)malloc(sizeof(Sqlist));

s->data =a[i];

s->next=NULL;

r->next =s;r =s;} }

int Inselem(Sqlist &L,int i,int x){ int j=1;Sqlist s,p=L->next;s=(Sqlist)malloc(sizeof(Sqlist));s->data =x;s->next =NULL;if(i<1||i>Getlength(L))

return 0;while(j

p=p->next;j++;} printf(“在第 %d 個位置插入數據:%dn”,i,x);s->next =p->next;

p->next =s;return 1;}

int Delelem(Sqlist &L,int i){

int j=1;

Sqlist p,q;

p=L;

if(i<1||i>Getlength(L))

return 0;s->data =a[i];

s->next =L->next;L->next =s;

while(j

{

p=p->next;

j++;

}

q=p->next;

p->next =q->next;

free(q);

return 1;}

void Displist(Sqlist L){ Sqlist p=L->next;

while(p!=NULL)

{

printf(“%dt”,p->data);

p=p->next;

}

printf(“n”);}

void input(int *pArray,int n){

printf(“請輸入數組數據(共含 %d 個元):n”,n);

for(int i=0;i

Scanf(“%d”,&pArray[i]);

}

int main(int argc, char* argv[]){ Sqlist L;

int Array[M],Select;initlialize(L);do{

printf(“請輸入選擇方法(1表示頭插法,2表示尾插法,0表示結束):n”);

scanf(“%d”,&Select);

switch(Select)

{

case 1: printf(“按頭插法建立線性表:n”);

input(Array,M);

creatlistF(L,Array,M);

break;case 2: printf(“按尾插法建立線性表:n”);

input(Array,M);

creatlistR(L,Array,M);

break;

}

printf(“原線性表數據為:n”);Displist(L);

Getelem(L,3);

Locatelem(L,2);

Inselem(L,5,5);

printf(“修改后的線性表數據為:n”);

Delelem(L,4);

Displist(L);}while(Select!=0);return 0;} 運行結果:

實驗三

棧和隊列實驗(6學時)實驗目的:

(1)熟練掌握棧和隊列的抽象數據類型及其結構特點;(2)實現基本的棧和隊列的基本操作算法程序。實驗內容:(類C算法的程序實現,任選其一)(1)設計與實現基本的堆棧和隊列結構下的各種操作(如堆棧的PUSH、POP等操作)(必做);

(2)以表達式計算為例,完成一個可以進行算術表達式計算功能的算法設計與實現(選做); 實驗準備:

1)計算機設備;2)程序調試環境的準備,如TC環境;3)實驗內容的算法分析與代碼設計與分析準備。實驗步驟:

1.錄入程序代碼并進行調試和算法分析; 2.編寫實驗報告。實驗結果://隊列存儲 #include #define QueueSize 10 typedef int status;

typedef struct sqqueue { char data[QueueSize];int front,rear;}SqQueue;

void InitQueue(SqQueue &qu){ qu.front =qu.rear =0;}

status EnQueue(SqQueue &qu,char x){

if((qu.rear +1)%QueueSize==qu.front)

return 0;qu.rear =(qu.rear+1)%QueueSize;qu.data[qu.rear]=x;return 1;}

status DeQueue(SqQueue &qu,char &x){ if(qu.rear==qu.front)

return 0;qu.front =(qu.front +1)%QueueSize;x=qu.data[qu.front];return 1;}

status GetHead(SqQueue qu,char &x){ if(qu.rear ==qu.front)

return 0;x=qu.data[(qu.front+1)%QueueSize];return 1;}

status QueueEmpty(SqQueue qu){ if(qu.rear==qu.front)

return 1;else

return 0;}

void main(){ SqQueue qu;char e;InitQueue(qu);printf(“Queue %sn”,(QueueEmpty(qu)==1?“Empty”:“Not Empty”));

printf(“inser an”);

EnQueue(qu,'a');

printf(“inser bn”);

EnQueue(qu,'b');

printf(“inser cn”);

EnQueue(qu,'c');

printf(“inser dn”);

EnQueue(qu,'d');

printf(“Queue %sn”,(QueueEmpty(qu)==1?“Empty”:“Not Empty”));

GetHead(qu,e);

printf(“Queue of top elem is: %cn”,e);

printf(“show of Queue:n”);

while(!QueueEmpty(qu)){

DeQueue(qu,e);

printf(“%ct”,e);}

printf(“n”);} 實驗結果:

(2)//用棧實現對表達式的求值運算

#include #include #include

#define TRUE 1 #define FALSE 0 #define OK #define ERROR 0 #define INFEASIBLE-1 #define OVERFLOW-2 #define STACK_INIT_SIZE

#define STACKINCREMENT 10

typedef int Status;typedef char ElemType;

typedef ElemType OperandType;

typedef char OperatorType;

typedef struct {

ElemType *base;

ElemType *top;

int stacksize;}SqStack;

Status InitStack(SqStack &S){

S.base =(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));

if(!S.base)exit(OVERFLOW);

S.top = S.base;

S.stacksize = STACK_INIT_SIZE;

return OK;}

Status GetTop(SqStack S){

ElemType e;

if(S.top == S.base)return ERROR;

e = *(S.top-1);

return e;}

Status Push(SqStack &S,ElemType e)

{

if(S.top1 < n){

merge(r, r1, i, i+length-1, i + 2*length1 < n-1)

merge(r, r1, i, i+length-1, n-1);

else

for(j = i;j < n;j++)r1[j] = r[j];}

void MergeSort(SortObject * pvector){

RecordNode record[MAXNUM];

int length = 1;

while(length < pvector->n){

mergePass(pvector->record, record, pvector->n, length);

length *= 2;

mergePass(record, pvector->record, pvector->n, length);

length *= 2;

} }

SortObject vector = {8, 49,38,65,97,76,13,27,49};

int main(){

int i;printf(“排序前序列為:”);

for(i = 0;i < 8;i++)

printf(“%d ”, vector.record[i]);printf(“n”);

MergeSort(&vector);printf(“采用歸并排序為:”);

for(i = 0;i < 8;i++)

printf(“%d ”, vector.record[i]);

getchar();

return 0;}

實驗結果:

實驗十

查找實驗(2學時)* 實驗目的:

(1)熟練掌握各種靜態查找表方法(順序查找、折半查找、索引順序表等);(2)熟練掌握二叉排序樹的構造方法和查找算法;

(3)了解和掌握其它查找方法。

實驗內容:(類C算法的程序實現,除順序查找算法之外,任選一個)(1)順序查找算法的實現(必做);(2)折半查找算法的實現(選做); 實驗結果://查找實驗

1、順序查找:

#include #define LENGTH 20

void SequenceSearch(int *fp,int Length){

int data;

printf(“開始使用順序查詢.請輸入你想要查找的數據: ”);

scanf(“%d”,&data);

for(int i=0;i

if(fp[i]==data)

{

printf(“數據%d 是第 %d 個數據n”,data,i+1);

return;

}

printf(“未能查找到數據%d.n”,i,data);}

void main(){

int count;

int arr[LENGTH];

printf(“請輸入你的數據的個數:”);

scanf(“%d”,&count);

printf(“請輸入 %d 個數據:”,count);

for(int i=0;i

scanf(“%d”,&arr[i]);

SequenceSearch(arr,count);}

實驗結果:

2、折半查找:

#include #include #define M 10

typedef struct { char *elem;

int length;

}SStable;

void Create(char **t)

{ int i;static char a[M+1];*t=a;for(i=1;i<=M;i++){

printf(“A[%d] is:”,i);

scanf(“%c”,&a[i]);

if(a[i]!= 'n')getchar();} }

int Searth(char *t,char k){ int i;for(i=M;i>=0 && t[i]!=k;i--);

Return i;}

void output(char *t){ int i;for(i=1;i<=M;i++)

printf(“n

A[%d] is %c”,i,t[i]);}

void px(char *t)

{ char s;int i,j;for(i=1;i<=M;i++)

for(j=i+1;j<=M;j++)

{

if(t[i]>t[j]){s=t[i];t[i]=t[j];t[j]=s;}

} }

int Search_bin(char *t,char k){ int low=1,high=M,mid;while(low<=high){

mid=(low+high)/2;

if(k==t[mid])return mid;

else if(k

else low=mid+1;} return 0;}

void main(){ char *t,k;int s;Create(&t);output(t);printf(“nplease input you search char:”);k=getchar();s=Searth(t,k);if(s>=0)printf(“1: use search find is A[%d]n”,s);else printf(“1:can not find itn”);px(t);output(t);s=Search_bin(t,k);if(s==0)printf(“n1:can not find it n”);else printf(“n2:use Search_bin find is A[%d]n”,s);getchar();}

實驗結果:

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

實驗報告

課程名:數據結構

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

撰寫時間: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;}

四、運行結果

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

}(一)單鏈表的基本操作

#include using namespace std;#define true 1 #define false 0 #define ok 1 #define error 0 #define overflow-2 typedef int Status;typedef int ElemType;typedef struct LNode //存儲結構 { ElemType data;struct LNode *next;}LNode,*LinkList;void CreateList(LinkList &L,int n)//尾插法創建單鏈表 { LinkList p;L=new LNode;L->next=NULL;//建立一個帶頭結點的單鏈表

LinkList q=L;//使q指向表尾

} Status GetElem(LinkList L,int i,ElemType &e)//取第i個元素 { LinkList p=L->next;int j=1;while(p&&jnext;++j;} for(int i=1;i<=n;i++){ p=new LNode;

cin>>p->data;p->next=NULL;q->next=p;q=p;} if(!p||j>i)return error;//第i個元素不存在

e=p->data;return ok;} Status LinkInsert(LinkList &L,int i,ElemType e)//插入 { LinkList p=L;int j=0;while(p&&jnext;++j;} //尋找第i-1個結點 if(!p||j>i-1)return error;//i小于1或者大于表長加1 LinkList s=new LNode;//生成新結點

s->data=e;s->next=p->next;//插入L中

p->next=s;return ok;}

Status ListDelete(LinkList &L,int i,ElemType &e)// 刪除 { LinkList p=L;LinkList q;int j=0;while(p->next&&j

p=p->next;++j;} if(!(p->next)||j>i-1)return error;//刪除位置不合理

q=p->next;p->next=q->next;//刪除并釋放結點

e=q->data;delete(q);return ok;

} void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){ //合并兩個順序鏈表

LinkList pa,pc,pb;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;delete(Lb);} void show(LinkList L)//{ LinkList p;p=L->next;while(p){ cout<

data<<“-->”;p=p->next;} cout<next;while(p){ ++i;

顯示 表長 3

p=p->next;} return i;} void xiugai(LinkList L)//修改 { int i,j=1;ElemType k;ElemType e,m;LinkList p=L->next;cout<<“請輸入要修改的元素位置(0>i;GetElem(L,i,e);cout<<“該位置的元素:”<>k;while(p&&jnext;++j;} m=p->data;p->data=k;cout<<“修改后的單鏈表顯示如下:”<>a;cout<<“請輸入第一個有序鏈表的元素共(”<>b;cout<<“請輸入第二個有序鏈表的元素共(”<>select;switch(select){ case 1:cout<<“請輸入單鏈表的長度:”<

cin>>x;

cout<<“請輸入”<

CreateList(list,x);break;case 2: cout<<“單鏈表顯示如下:”<

show(list);break;case 3: int s;cout<<“單鏈表的長度為:”<>x;while(x<0||x>Length(list,s)){ cout<<“輸入有誤,請重新輸入”<>x;} GetElem(list,x,y);cout<<“該位置的元素為:”<>x;while(x<0||x>Length(list,s)){ cout<<“輸入有誤,請重新輸入”<>x;} cout<<“要插入的元素值:”;cin>>y;LinkInsert(list,x,y);cout<<“插入后單鏈表顯示如下:”<>x;while(x<0||x>Length(list,s)){ cout<<“輸入有誤,請重新輸入”<>x;} cout<<“要刪除的元素值:”<

ListDelete(list,x,y);

} break;case 8: hebing();break;case 9: exit(0);break;default : cout<<“輸入有誤,請重新輸入”<

四、測試結果 1)順序表 的測試結果

8 2)單鏈表的測試結果

五、心得體會

當聽到老師說寫數據結構實驗報告時,我有點驚訝,才學了不到一個月,就要寫實驗報告。記得去年學習C++時,學了一個學期,程序設計用了三周,才完成的,這個實驗報告居然要一周完成兩個設計,覺得很難。但是現在一周過去了,我也寫完了,自我感覺良好。

通過這次寫實驗報告,我深切的理解了這門課的本質。剛開始學這門課時,當時還不清楚這門課程的目的,現在,我真正的理解了:數據結構像是身體的骨骼,而C++是填充這骨骼的肉體,二者相結合才能使整個程序更加完整,健全。數據結構是個框架,模型,抽象數據類型中列舉了各種操作,而所用的C++語言,將各種操作描述出來構成算法。數據結構+算法=程序設計。

在這次設計的過程中,我還遇到了,很多的問題。順序表是按順序存儲的,用了一維數組來存儲,又結合C++的程序設計,我又用了類,但是,在執行時出現了問題。后來問同學,指出我的錯誤,不過獲益不少。我又重新整理思路,把順序表的基本操作寫好了。雖然走了很多彎路,但是讓我認識到,一定要創新,大膽,不能按照舊的思路去干新的事情。

單鏈表寫起來簡單多了,這個很快就搞定了。但是細節上出了問題。比如說,有些變量的重復定義,有些變量又沒有定義,在調用函數,就直接復制過來,沒有改參數……通過修改,我深刻理解到:細節決定成敗,在以后,不管做任何事情都要認真,細心。

這次的實驗報告,讓我受益匪淺,不僅有知識方面的,還有生活和精神上的。總之,我會繼續我的興趣編程,相信在編程的過程中,能不斷的提高自己。

下載數據結構線性表試驗報告(最終定稿)word格式文檔
下載數據結構線性表試驗報告(最終定稿).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


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

相關范文推薦

    北京科技大學數據結構試驗報告(附錄含代碼)

    一、 1)功能描述 輸入數據(設為整型)建立單鏈表,并求相鄰兩節點data值之和為最大的第一節點。 2)詳細設計 遵循鏈表建立的基本思想,建立一個新的鏈表,H為表頭,r為新節點,p為表尾節......

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

    實驗報告二 線性表的順序存儲 班級: 2010XXX 姓名: HoogLe 學號: 2010XXXX 專業: XXXX 2858505197@qq.com 一、 實驗目的: (1) 掌握順序表的基本操作的實現方法。 (2) 應用順序表的基......

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

    實驗報告三 線性表的鏈式存儲 班級: 2010XXX 姓名: HoogLe 學號: 2010XXXX 專業: XXXX 2858505197@qq.com 一、 實驗目的: (1) 掌握單鏈表的基本操作的實現方法。 (2) 掌握循環單鏈表......

    數據結構試驗報告一海龜作圖(樣例5)

    實驗報告:海龜作圖 題目:設計一個能夠實現海龜抽象數據類型Turtle。 海龜作圖的抽象數據類型的定義為: ADT Turtle{ 數據對象:D={ai |ai∈CharSet,i=1,2,3,…,n n>=0} 數據關系:R......

    實驗總結報告-線性表

    實驗總結報告—棧和隊列 學號:姓名: 時間: 一、目的 1.做實驗的目的 加深對線性表的理解,學會定義線性表的存儲結構,掌握線性表的基本操作。 2.撰寫實驗報告的目的 對本次實驗情......

    電子政務試驗報告

    電子政務試驗報告 一.試驗時間:第十周 二.試驗地點:05612 三.試驗目的和要求: 1、本次模擬實習選擇的電子政務實踐平臺是奧派電子政務實踐平臺,通過在這個相對完整的電子政務系統上......

    電子商務試驗報告[★]

    四、實驗思考1、請描述你在該小組實驗中都完成了哪些任務?答:查看商城用戶訂單詳細信息,生成已確認付款訂單,生成已確認缺貨采購單,生成已確認預警商品采購單,生成已確認正常商品......

    機械設計試驗報告

    請分別用三張實驗報告紙抄寫!第10周周五交到各班學習委員,過期不侯!另將軸系結構圖一并交上,每人一份,圖 上要標明尺寸! 請學習委員將實驗報告按學號排好交給我! 實驗一機械零件認......

主站蜘蛛池模板: 国产三级av在线播放| 亚洲精品v欧洲精品v日韩精品| 影音先锋中文字幕无码| 极品少妇的粉嫩小泬视频| 久久久久高潮毛片免费全部播放| 久久狠狠高潮亚洲精品| 免费国产黄网站在线观看| 亚洲中文字幕无码久久2018| 久久久久免费看黄a片app| 免费高清av一区二区三区| 欧美裸体xxxx极品| 少妇人妻精品无码专区视频| 人妻熟女一区二区aⅴ林晓雪| 亚洲精品无播放器在线播放| 天天躁夜夜躁av天天爽| 日日干夜夜操| 国产成人无码av一区二区| 中文字幕无码精品亚洲资源网久久| 久久综合亚洲鲁鲁五月天| 国产第19页精品| 亚洲精品无码av人在线观看| 麻豆果冻传媒精品国产av| 亚洲欧美日韩国产综合在线一区| 国产欧美va欧美va香蕉在线观看| 国偷自产一区二区三区在线视频| 国产精品成人av在线观看| 国产亚洲欧美人成在线| 国产成人av性色在线影院色戒| 国产特级毛片aaaaaa高潮流水| 日日摸夜夜添狠狠添欧美| 亚洲欧洲美洲无码精品va| 人妻蜜桃久久AV一区| 又大又粗又黄的网站不卡无码| 亚洲一区在线日韩在线秋葵| 国产精品va尤物在线观看蜜芽| 国产人妻久久精品一区二区三区| 草草网站影院白丝内射| 久久亚洲私人国产精品| 无码人妻丰满熟妇区毛片18| 日日干夜夜操高清视频| 色窝窝无码一区二区三区色欲|