2023年數(shù)據(jù)結(jié)構(gòu)與算法實驗報告_第1頁
2023年數(shù)據(jù)結(jié)構(gòu)與算法實驗報告_第2頁
2023年數(shù)據(jù)結(jié)構(gòu)與算法實驗報告_第3頁
2023年數(shù)據(jù)結(jié)構(gòu)與算法實驗報告_第4頁
2023年數(shù)據(jù)結(jié)構(gòu)與算法實驗報告_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)結(jié)構(gòu)實驗報告

題目:線性表

班級:網(wǎng)絡(luò)工程1401班

學(xué)號:______

指導(dǎo)教師:高峰

日期:2023/7/6

實驗一:線性表

一:實驗規(guī)定

掌握數(shù)據(jù)結(jié)構(gòu)中線性表的基本概念。

純熟掌握線性表的基本操作:創(chuàng)建、插入、刪除、查找、輸出、求長度及

合并并運算在順序存儲結(jié)構(gòu)撒謊可以的實驗。

純熟掌握鏈表的各種操作和應(yīng)用。

二.實驗內(nèi)容

1.編程實現(xiàn)在順序存儲的有序表中插入一個元素(數(shù)據(jù)類型為整型)。

2.編程實現(xiàn)把順序表中從i個元素開始的k個元素刪除(數(shù)據(jù)類型為整型)。

三:實驗過程及環(huán)節(jié)

源代碼:

#include<stdio.h>

#include<ma1loc.h>

#defineLIST_INIT_SIZE100

#defineLISTINCREMENT10

typedefstruct{

int*elem;

int1ength;

int1istsize;

}SqList;

//SqListsq;

voidInitList_Sq(SqList*sq)//初始化列表

I

sq->e1em=(int*)ma11oc(LIST_INIT_SIZE*sizeof(int));

sq->length=O;

sq->listsize=LIST_INIT_S!ZE;

Printf(〃----申請空間成功----!\n〃);

)

voidGetE1em(SqList*sq,inti)〃獲取第i位置元素的值

{

int*p;

p=&(sq->elem[i-1]);

printf*p);

printf(〃\n〃);

)

intListlnsert_Sq(SqList*sq,inti,inta)〃在i位置之前插入a

(

int*p,*q;

if(i<=0I|i>sq—>length+1)

I

printfC—-位置不合法——!\n");

return0;

)

if(sq->1ength>=sq->1istsize)

(

int*newbase=(int*)realloc(sq—>elem,(sq—>1istsize+LISTINCRE

MENT)*sizeof(int));

if(!newbase)

(

printf(〃申請空間溢出\n〃);

return0;

)

sq->elem=newbase;

sq—>listsize+=LISTINCREMENT;

)

p=&(sq->e1em[i-1]);〃p指向第i位置的元素

q=&(sq->elem[sq->length-1]);//q指向最后一個元素

for(;q>=p;—q)*(q+1)=*q;

*p=a;

++sq—>1ength;

return1;

)

intListDelete_Sq(SqList*sq,inti)〃刪除i位置上的值

(

int*p,*q;

if(i<1||i>sq->1ength)return0;

p=fc(sq—>elem[i-l]);//p指向第i位置的元素

q=sq—>elem+sq->length—1;//q指向最后一個元素

for(++p;p〈=q;++p)

!

*(pT)=*p;

)

—sq->length;

return1;

}

voidvisit(SqList*sq)//輸出數(shù)據(jù)

inti=l;

for(;i<=sq->length;i++)

(

int*p;

p=&sq->ele;

printf(,z%dM,*p);

printf(n〃);

)

)

voidmain()

(

inti=1,a=0,boo=1,number=0;

SqLists,*sq;

sq二&s;

InitList_Sq(sq);

printf(〃初始化空表\n〃);

printf(M輸入數(shù)據(jù)個數(shù):\n");

scanf("%d〃,&number);

printf(“輸入%d個數(shù)據(jù):",number);

printf(〃\n〃);

for(;i<=number;i++)

I

scanf(繪d〃,&a);

if(boo=ListInsert_Sq(sq,i,a))

(

printf(〃----插入成功!----\n〃);

)

else

I

printfC---插入不成功,重新插入!\n〃);

i=i-l;

)

)

printf(〃輸出所有元素\n〃);

visit(sq);

printf(〃\n〃);

Printf(〃輸出刪除的位置:”);

scanf(繪d〃,&a);

if(boo=ListDe1ete_Sq(sq,a))

I

printf("—數(shù)據(jù)刪除成功!----\n〃);

}else

I

printfC—沒有刪除成功----\n〃);

)

Printf(〃輸出所有元素:\n〃);

visit(sq);

printf(〃\n〃);

printf(〃輸出要顯示數(shù)據(jù)的位置:〃);

scanf("%d,z,&a);

printf("輸出%:1位置數(shù)值\n",a);

if(a<01Isq->length)

PrintfC---輸出位置的數(shù)據(jù)不存在——\n");

)

eIse

(

GetE1em(sq,a);

)

)

環(huán)節(jié):

1.初始化空表

2.順序插入數(shù)據(jù)后輸出所有元素

3.選擇刪除位置,刪除數(shù)據(jù)后輸出所有元素

4.選擇查看的數(shù)據(jù)位置,輸出選擇查看的數(shù)據(jù)

四:實驗結(jié)果及分析

口X

WilInJ-

初安臺d七

輸入4個妾攵據(jù)二

1234

—?—

-----徜功!-----

-------!-----------------------------

-------!-----------------------------

與俞出所7fr

1234

播出RO?J徐的位置;2

——絨據(jù)朋崢成功!

與俞出月片有">i,.M:

134

忤前士菱顯缶奏攵據(jù)白勺位第L3

麗出3母互數(shù)值

住叟狗立開自車氤入二法

分析:

本程序在實現(xiàn)順序存儲插入以及刪除i個元素開始的k個元素刪除(數(shù)據(jù)類型為

整型)。之外在刪除、查看是實時輸出結(jié)果,并且可以查看希望顯示數(shù)據(jù)的位置。

數(shù)據(jù)結(jié)構(gòu)實驗報告

題目:________樹_________

班級:網(wǎng)絡(luò)工程1401班

學(xué)號:______

指導(dǎo)教師:高峰

日期:2023/7/6

實驗二:樹

一:實驗規(guī)定

掌握二叉樹,二叉樹排序數(shù)的概念和存儲方法。

掌握二叉樹的遍歷算法。

純熟掌握編寫實現(xiàn)樹的各種運算的算法。

二.實驗內(nèi)容

記錄一棵二叉樹中每種類型節(jié)點數(shù)(度為0/1/2的節(jié)點數(shù))。

三:實驗過程及環(huán)節(jié)

#inc1ude<stdio.h>

#include<mal1oc.h>

#include<stdlib.h>

typedefstructBitNode(

intdata;

structBitNode*1child,*rchild;

}BitNode,*BitTree;

BitTreeBitTreeInit(){

BitTreeBT;

BT=(BitNode*)ma1loc(sizeof(BitNode));

BT=NULL;

returnBT;

!

BitTreeBitTreeCreat(BitTree&BT){

intch;

printf(〃請輸入節(jié)點的內(nèi)容,輸入0時結(jié)束建立!\n〃);

seanf(M%dH,&ch);

if(ch=0)

BT=NULL;

else{

BT=(BitTree)maHoc(sizeof(BitNode));

BT->data二ch;

BitTreeCreat(BT->1child);

BitTreeCreat(BT->rchild);

I

returnBT;

voidBitTreeEmpty(BitTreeBT){

if(BT=NULL)

Printf(”樹為空!\n〃);

else

printf(〃樹非空!\n");

)

voidPreOrderTraverse(BitTreeBT){

if(BT!=NULL){

printf(u樹結(jié)點的內(nèi)容為:%d\n〃,BT->data);

PreOrderTraverse(BT—>1chi1d);

PreOrderTraverse(BT->rchild);

}

}

voidIn0rderTraverse(BitTreeBT){

if(BT!=NULL){

In0rderTraverse(BT->lchild);

printf(〃樹結(jié)點的內(nèi)容為:%d\n〃,BT->data);

InOrderTraverse(BT->rchild);

}

)

voidPostOrderTraverse(BitTreeBT){

if(BT!=NULL){

PostOrderTraverse(BT->lchi1d);

Post0rderTraverse(BT->lchi1d);

printf(”樹結(jié)點的內(nèi)容為:%d\n〃,BT->data);

}

)

intcount(BitTreeBT){

if(BT==NULL)

return0;

else

return(count(BT—>1child)+count(BT->rchild)+l);

}

intBinTreeDepth(BitTreeBT){

inti=l,j=1;

if(BT==NULL)

return0;

e1se

(

i=BinTreeDepth(BT->lchi1d);

j=BinTreeDepth(BT->rchi1d);

if(i>j)

return(i+l);

else

return(j+1);

)

)

voidBinTreeC1ear(BitTree&BT){

if(BT){

if(BT->lchi1d)

BinTreeClear(BT->1child);

if(BT->rchild)

BinTreeC1ear(BT->rchi1d);

free(BT);

BT=NULL;

)

}

main(){

inti=1,j,1;

BitTreeBT;

while(i!=0){

printf(〃-------------------歡迎使用--------------------------\n'*);

printf(〃請選擇要進(jìn)行的操作'n〃);

printf(,zl.初始化一棵樹2.建立一棵樹3.判斷樹是否為空\n〃);

printf(〃4.按前序遍歷樹5.按中序遍歷樹6.按后序遍歷樹\n〃);

printf(“7.求樹的深度8.求樹的結(jié)點數(shù)9.把樹清空\n〃);

Printf(〃0.退出操作界面\n〃);

printf------------------謝謝使用---------------------------\n”);

scanf(u%dz/,&j);

switch(j){

case1:BT=BitTreeInit();printf(〃樹已經(jīng)初始化!\n〃);break;

case2:BitTreeCreat(BT);break;

case3:BitTreeEmpty(BT);break;

case4:PreOrderTraverse(BT);break;

case5:InOrderTraverse(BT);break;

case6:PostOrderTraverse(BT);break;

case7:1=BinTreeDepth(BT);printf(“樹的深度為:%d\n

〃,1);break;

case8:l=count(BT);printf("樹的結(jié)點數(shù)為:%d\n〃,1);brea

k;

case9:BinTreeClear(BT);printf(〃樹已經(jīng)清空!\n〃);break;

case0:exit(0);

}

)

)

環(huán)節(jié):

1.選擇進(jìn)行的操作

2.初始化、建立、判斷樹是否空、先/中/后序遍歷、求深度/結(jié)點,清空樹

3.顯示結(jié)果

四:實驗結(jié)果及分析

B"&\Users\dell\Desktop^5§§W^\demo\Debug\s.exe

------------雙迎使用-------------------------------歡迎使用-------------------

請選擇要進(jìn)行的操作

請解要進(jìn)行的操作1.初始化一棵樹2.建立一棵樹3.判斷樹是否為空

4.按前序遍歷樹5.按中序遍歷樹6.按后序遍歷樹

1.初雌一棵樹2.建立一嬲工到輛提否為空7.求樹的深度8.求樹的結(jié)點數(shù)9.把樹清空

曲序顫樹.按巾序遍歷樹.按后序遍歷樹0.退出操作界面

56-----------------謝謝使用---------------

7.求樹的深度8.求物結(jié)毓9.把樹清空

Q,觸麻界面樹結(jié)點的內(nèi)容為:3

------------謝謝覷--------------樹結(jié)點的內(nèi)容為:4

樹結(jié)點的內(nèi)容為:2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論