欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      數(shù)據(jù)結(jié)構(gòu)--實(shí)驗(yàn)報(bào)告 線性表的基本操作

      時(shí)間:2019-05-12 07:17:16下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《數(shù)據(jù)結(jié)構(gòu)--實(shí)驗(yàn)報(bào)告 線性表的基本操作》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《數(shù)據(jù)結(jié)構(gòu)--實(shí)驗(yàn)報(bào)告 線性表的基本操作》。

      第一篇:數(shù)據(jù)結(jié)構(gòu)--實(shí)驗(yàn)報(bào)告 線性表的基本操作

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

      #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 //存儲(chǔ)結(jié)構(gòu) { ElemType data;struct LNode *next;}LNode,*LinkList;void CreateList(LinkList &L,int n)//尾插法創(chuàng)建單鏈表 { LinkList p;L=new LNode;L->next=NULL;//建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表

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

      } Status GetElem(LinkList L,int i,ElemType &e)//取第i個(gè)元素 { 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個(gè)元素不存在

      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個(gè)結(jié)點(diǎn) if(!p||j>i-1)return error;//i小于1或者大于表長加1 LinkList s=new LNode;//生成新結(jié)點(diǎn)

      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;//刪除并釋放結(jié)點(diǎn)

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

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

      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<<“請(qǐng)輸入要修改的元素位置(0>i;GetElem(L,i,e);cout<<“該位置的元素:”<>k;while(p&&jnext;++j;} m=p->data;p->data=k;cout<<“修改后的單鏈表顯示如下:”<>a;cout<<“請(qǐng)輸入第一個(gè)有序鏈表的元素共(”<>b;cout<<“請(qǐng)輸入第二個(gè)有序鏈表的元素共(”<>select;switch(select){ case 1:cout<<“請(qǐng)輸入單鏈表的長度:”<

      cin>>x;

      cout<<“請(qǐng)輸入”<

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

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

      ListDelete(list,x,y);

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

      四、測(cè)試結(jié)果 1)順序表 的測(cè)試結(jié)果

      8 2)單鏈表的測(cè)試結(jié)果

      五、心得體會(huì)

      當(dāng)聽到老師說寫數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告時(shí),我有點(diǎn)驚訝,才學(xué)了不到一個(gè)月,就要寫實(shí)驗(yàn)報(bào)告。記得去年學(xué)習(xí)C++時(shí),學(xué)了一個(gè)學(xué)期,程序設(shè)計(jì)用了三周,才完成的,這個(gè)實(shí)驗(yàn)報(bào)告居然要一周完成兩個(gè)設(shè)計(jì),覺得很難。但是現(xiàn)在一周過去了,我也寫完了,自我感覺良好。

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

      在這次設(shè)計(jì)的過程中,我還遇到了,很多的問題。順序表是按順序存儲(chǔ)的,用了一維數(shù)組來存儲(chǔ),又結(jié)合C++的程序設(shè)計(jì),我又用了類,但是,在執(zhí)行時(shí)出現(xiàn)了問題。后來問同學(xué),指出我的錯(cuò)誤,不過獲益不少。我又重新整理思路,把順序表的基本操作寫好了。雖然走了很多彎路,但是讓我認(rèn)識(shí)到,一定要?jiǎng)?chuàng)新,大膽,不能按照舊的思路去干新的事情。

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

      這次的實(shí)驗(yàn)報(bào)告,讓我受益匪淺,不僅有知識(shí)方面的,還有生活和精神上的??傊視?huì)繼續(xù)我的興趣編程,相信在編程的過程中,能不斷的提高自己。

      第二篇:數(shù)據(jù)結(jié)構(gòu)線性表實(shí)驗(yàn)報(bào)告

      實(shí)驗(yàn)報(bào)告

      課程名:數(shù)據(jù)結(jié)構(gòu)

      實(shí)驗(yàn)名:線性表及其操作 姓名: 班級(jí): 學(xué)號(hào):

      撰寫時(shí)間:2014.09.24

      一 實(shí)驗(yàn)?zāi)康呐c要求

      1.掌握線性表的實(shí)現(xiàn)

      2.掌握線性表的基本操作的實(shí)現(xiàn)

      二 實(shí)驗(yàn)內(nèi)容

      ? 分別完成線性表的順序表示及鏈?zhǔn)奖硎?/p>

      ? 在兩種表示上, 分別實(shí)現(xiàn)一些線性表的操作, 至少應(yīng)該包括 – 在第i個(gè)位置插入一個(gè)元素 – 刪除第i個(gè)元素 – 返回線性表長

      – 返回第i個(gè)元素的值

      三 實(shí)驗(yàn)結(jié)果與分析

      #include #include //---------線性表鏈?zhǔn)奖硎?----------struct V//聲明一個(gè)結(jié)構(gòu)體類型struct V { int value;struct V * next;//定義結(jié)構(gòu)體變量 };void PrintLink(struct V*p)//定義一個(gè)結(jié)構(gòu)體指針 { while(p!=NULL)//只要指針指向的變量不為NULL;就會(huì)一直循環(huán)鏈表指向下一個(gè)結(jié)構(gòu)體

      {

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

      p=(*p).next;//指針指向下一個(gè)結(jié)構(gòu)體

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

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

      (*head).value=-100;//表頭為-100(*head).next=NULL;printf(“------------線性表鏈?zhǔn)奖硎?-----------n”);

      int i,n=10;struct V*p=head;printf(“10個(gè)數(shù)據(jù):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);//調(diào)用PrintLink函數(shù)

      printf(“刪除第四個(gè)數(shù)據(jù):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(“插入第十個(gè)數(shù)據(jù):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];//---------輸出數(shù)組元素------------printf(“-------------線性表順序表示---------n”);for(i=0;i

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

      printf(“%3d”,a[i]);} printf(“n”);//--------插入一個(gè)數(shù)組元素---------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(“輸出插入一個(gè)元素的數(shù)組:n”);for(i=0;i

      {

      if(i

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

      else

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

      printf(“數(shù)組元素為: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位置插入一個(gè)元素------------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:實(shí)驗(yàn)結(jié)果截圖

      實(shí)驗(yàn)分析:已在程序中按規(guī)定格式標(biāo)注。

      第三篇:福州大學(xué)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-線性表

      數(shù)據(jù)結(jié)構(gòu)原理實(shí)驗(yàn)報(bào)告

      學(xué)號(hào):

      姓名:

      線性表

      一、問題描述 1.實(shí)現(xiàn)ADT表

      2.設(shè)表的Reverse運(yùn)算將表中元素的次序反轉(zhuǎn)。擴(kuò)充用數(shù)組實(shí)現(xiàn)表的結(jié)構(gòu)List,增加函數(shù)Reverse(L),將表L中元素的次序反轉(zhuǎn),并要求就地實(shí)現(xiàn)Reverse運(yùn)算。

      二、算法描述

      從i=0開始,將表中第N個(gè)元素與N-i-1個(gè)元素調(diào)換即可

      三、核心代碼

      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;}

      四、運(yùn)行結(jié)果

      第四篇:《數(shù)據(jù)結(jié)構(gòu)》 實(shí)驗(yàn)報(bào)告(附實(shí)例) ---實(shí)驗(yàn)一 線性表的基本操作實(shí)現(xiàn)

      實(shí)驗(yàn) 一 線性表的基本操作實(shí)現(xiàn)及其應(yīng)用

      一、實(shí)驗(yàn)?zāi)康?/p>

      1、熟練掌握線性表的基本操作在兩種存儲(chǔ)結(jié)構(gòu)上的實(shí)現(xiàn),其中以熟悉各種鏈表的操作為重點(diǎn)。

      2、鞏固高級(jí)語言程序設(shè)計(jì)方法與技術(shù),會(huì)用線性鏈表解決簡單的實(shí)際問題。

      二、實(shí)驗(yàn)內(nèi)容

      1、單鏈表的表示與操作實(shí)現(xiàn)(*)

      2、約瑟夫環(huán)問題

      3、Dr.Kong的藝術(shù)品

      三、實(shí)驗(yàn)要求

      1、按照數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)任務(wù)書,提前做好實(shí)驗(yàn)預(yù)習(xí)與準(zhǔn)備工作。

      2、加“*”題目必做,其他題目任選;多選者并且保質(zhì)保量完成適當(dāng)加分。

      3、嚴(yán)格按照數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告模板和規(guī)范,及時(shí)完成實(shí)驗(yàn)報(bào)告。

      四、實(shí)驗(yàn)步驟

      (說明:依據(jù)實(shí)驗(yàn)內(nèi)容分別說明實(shí)驗(yàn)程序中用到的數(shù)據(jù)類型的定義、主程序的流程以及每個(gè)操作(成員函數(shù))的偽碼算法、函數(shù)實(shí)現(xiàn)、程序編碼、調(diào)試與分析、總結(jié)、附流程圖與主要代碼)

      ㈠、數(shù)據(jù)結(jié)構(gòu)與核心算法的設(shè)計(jì)描述

      (程序中每個(gè)模塊或函數(shù)應(yīng)加注釋,說明函數(shù)功能、入口及出口參數(shù))

      1、單鏈表的結(jié)點(diǎn)類型定義

      /* 定義DataType為int類型 */ typedef int DataType;

      /* 單鏈表的結(jié)點(diǎn)類型 */ typedef struct LNode { DataType data;struct LNode *next;}LNode,*LinkedList;

      2、初始化單鏈表

      LinkedList LinkedListInit(){ // 每個(gè)模塊或函數(shù)應(yīng)加注釋,說明函數(shù)功能、入口及出口參數(shù) }

      3、清空單鏈表

      void LinkedListClear(LinkedList L){// 每個(gè)模塊或函數(shù)應(yīng)加注釋,說明函數(shù)功能、入口及出口參數(shù)}

      4、檢查單鏈表是否為空

      int LinkedListEmpty(LinkedList L){ ….}

      5、遍歷單鏈表 void LinkedListTraverse(LinkedList L){ ….}

      6、求單鏈表的長度

      int LinkedListLength(LinkedList L){ ….}

      7、從單鏈表表中查找元素

      LinkedList LinkedListGet(LinkedList L,int i){ //L是帶頭結(jié)點(diǎn)的鏈表的頭指針,返回第 i 個(gè)元素 }

      8、從單鏈表表中查找與給定元素值相同的元素在鏈表中的位置

      LinkedList LinkedListLocate(LinkedList L, DataType x){ …… }

      9、向單鏈表中插入元素

      void LinkedListInsert(LinkedList L,int i,DataType x){ // L 為帶頭結(jié)點(diǎn)的單鏈表的頭指針,本算法 // 在鏈表中第i 個(gè)結(jié)點(diǎn)之前插入新的元素 x }

      10、從單鏈表中刪除元素

      void LinkedListDel(LinkedList L,DataType x){ // 刪除以 L 為頭指針的單鏈表中第 i 個(gè)結(jié)點(diǎn) }

      11、用尾插法建立單鏈表

      LinkedList LinkedListCreat(){ …… } ㈡、函數(shù)調(diào)用及主函數(shù)設(shè)計(jì)

      (可用函數(shù)的調(diào)用關(guān)系圖說明)㈢ 程序調(diào)試及運(yùn)行結(jié)果分析 ㈣ 實(shí)驗(yàn)總結(jié)

      五、主要算法流程圖及程序清單

      1、主要算法流程圖:

      2、程序清單

      (程序過長,可附主要部分)

      說明:以后每次實(shí)驗(yàn)報(bào)告均按此格式書寫。

      我在布置實(shí)驗(yàn)室時(shí),僅給出實(shí)驗(yàn)名稱、實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)內(nèi)容及相關(guān)數(shù)據(jù)結(jié)構(gòu)。

      題目一程序參考框架 # include # include # include # include # include /* 定義ElemType為int類型 */ typedef int ElemType;#define TRUE 1 #define FALSE 0 #define NULL 0 #define flag-1

      /* 單鏈表的結(jié)點(diǎn)類型 */ typedef struct LNode {ElemType data;struct LNode *next;} LNode,*LinkedList;

      /* 初始化單鏈表 */ LinkedList LinkedListInit(){ } /* 清空單鏈表 */ void LinkedListClear(LinkedList L){ } /* 檢查單鏈表是否為空 */ int LinkedListEmpty(LinkedList L){ } /* 遍歷單鏈表 */ void LinkedListTraverse(LinkedList L){ } int LinkedListLength(LinkedList L){ } LinkedList LinkedListGet(LinkedList L, int i){ } LinkedList LinkedListLocate(LinkedList L, ElemType x){ }

      void LinkedListInsert(LinkedList L, int i, ElemType x){LinkedList pre,p,s;int j;pre=L;j=1;p=L->next;while(pre&&jnext;j++;} if(pre==NULL){printf(“給的i值超過了表長”);exit(0);} s=(LNode *)malloc(sizeof(LNode));s->data=x;pre->next=s;s->next=p;}

      void LinkedListDel(LinkedList L,ElemType x){ LinkedList pre,p;int j;pre=L;j=1;p=L->next;while(p&&p->data!=x){pre=p;p=p->next;j++;} if(p==NULL){printf(“表中沒有值為x的結(jié)點(diǎn)”);exit(0);} pre->next=p->next;free(p);}

      LinkedList LinkedListCreat(){ LinkedList L=LinkedListInit(),p,r;ElemType x;r=L;printf(“please input data,input-1 is endn”);scanf(“%d”,&x);while(x!=flag){p=(LinkedList)malloc(sizeof(LNode));p->data=x;r->next=p;r=p;scanf(“%d”,&x);} r->next=NULL;return L;}

      int scan(){int d;printf(“please input the operationn”);printf(“1.初始化 2.清空3.求鏈表長度4.檢查鏈表是否為空n”);printf(“5.檢查鏈表是否為滿 6.遍歷鏈表 7.從鏈表中查找元素n”);printf(“8.從鏈表中查找與給定元素值相同的元素在順序表中的位置n”);printf(“9.向鏈表中插入元素10.從鏈表中刪除元素n”);printf(“其他鍵退出。。。n”);scanf(“%d”,&d);return(d);}

      main(){int quit=0;int i;ElemType e;LinkedList L;while(!quit)switch(scan()){case 1: ….;break;case 2: ….;break;case 3: ….;break;case 4: ….;break;case 5:LinkedListTraverse(L);break;case 6: ….;break;case 7: ….;break;case 8: ….;break;case 9: ….;break;case 10: ….;break;default: quit=1;} return 0;}

      第五篇:數(shù)據(jù)結(jié)構(gòu)線性表試驗(yàn)報(bào)告

      線性表上機(jī)實(shí)習(xí)

      1、實(shí)驗(yàn)?zāi)康?/p>

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

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

      (3)熟練掌握順序表的基本運(yùn)算:查找、插入、刪除等,掌握順序表的隨機(jī)存取特性。(4)了解線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),熟練掌握線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的C語言描述方法。(5)熟練掌握線性鏈表(單鏈表)的基本運(yùn)算:查找、插入、刪除等,能在實(shí)際應(yīng)用中靈活選擇適當(dāng)?shù)逆湵斫Y(jié)構(gòu)。

      2、實(shí)驗(yàn)要求

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

      3、實(shí)驗(yàn)內(nèi)容: ① 順序表

      (1)抽象數(shù)據(jù)類型定義

      typedef struct {

      TypeData data[maxsize];

      //容量為maxsize的靜態(tài)順手表

      int n;

      //順序表中的實(shí)際元素個(gè)數(shù)

      }SeqList;

      //靜態(tài)順序表的定義

      在本次實(shí)驗(yàn)中,首先建立一個(gè)空的靜態(tài)順序表,然后鍵盤輸入數(shù)據(jù)存入表中,然后進(jìn)入菜單選擇界面,通過不同的數(shù)字輸入,實(shí)現(xiàn)對(duì)順序表,刪除,插入,查找,顯示等操作。

      (2)存儲(chǔ)結(jié)構(gòu)定義及算法思想

      在順序表結(jié)構(gòu)體的定義中,typedef int TypeData 為整型,存儲(chǔ)結(jié)構(gòu)如下:

      for(n=0;n

      cout<<“請(qǐng)輸入線性表數(shù)據(jù)”<

      cin>>L.data[n];

      //順序?qū)?shù)據(jù)存入順序表

      }

      //其他存儲(chǔ)與此類似,都是直接賦值與數(shù)組的某一位

      插入版塊子函數(shù):

      void insert(SeqList &L)

      //插入數(shù)據(jù) {

      int a,b,c,k;

      cout<<“請(qǐng)輸入插入的數(shù)及其插入的位置”<

      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--;

      //通過循環(huán),實(shí)現(xiàn)插入位置后的數(shù)據(jù)挨個(gè)往后移動(dòng)一位

      }

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

      (3)實(shí)驗(yàn)結(jié)果與分析

      ② 單鏈表

      (1)抽象數(shù)據(jù)類型定義

      typedef struct node{ DataType data;

      //鏈表的數(shù)據(jù)類型

      struct node *link;

      //鏈表的結(jié)點(diǎn)指針

      }linknode,*linklist;

      //定義了結(jié)構(gòu)體linklode和結(jié)構(gòu)體指針linklist

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

      (2)存儲(chǔ)結(jié)構(gòu)定義及算法思想

      在單鏈表中,typedef int DataType;DataType data;定義鏈表存儲(chǔ)數(shù)據(jù)位整型。存儲(chǔ)結(jié)構(gòu)如下:

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

      k++;

      //首先找到單鏈表的最后結(jié)點(diǎn)(如果是只有頭結(jié)點(diǎn)

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

      for(int i=0;i

      { cout<<“請(qǐng)輸入數(shù)據(jù)”<

      //開辟新的結(jié)點(diǎn)空間并轉(zhuǎn)化為linklist指針型

      cin>>q->data;

      q->link=p->link;

      //將前面一個(gè)結(jié)點(diǎn)的指向(及NULL)賦給新開辟的結(jié)點(diǎn)的指向

      p->link=q;

      //將插入點(diǎn)前面一個(gè)結(jié)點(diǎn)指向新開辟的的結(jié)點(diǎn)

      p=q;

      //將指明的最后一個(gè)一個(gè)結(jié)點(diǎn)向后移1位到最后一位,以便后面接著輸入

      }

      刪除結(jié)點(diǎn)子函數(shù):

      void delate(linklist &l){

      //刪除單鏈表數(shù)據(jù)

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

      cout<<“請(qǐng)輸入想要?jiǎng)h除的結(jié)點(diǎn)位置”<

      cin>>m;

      p=l;

      //將頭結(jié)點(diǎn)賦給轉(zhuǎn)移指針p

      while(p&&i

      //查找刪除結(jié)點(diǎn)的位置

      p=p->link;

      //當(dāng)在單鏈表中間已查到刪除結(jié)點(diǎn)或p=NULL時(shí)跳出循環(huán)

      i++;

      } if(p==NULL){

      //當(dāng)p=NULL跳出循環(huán)時(shí),表明鏈表中沒有該結(jié)點(diǎn)

      cout<<“該結(jié)點(diǎn)不存在,刪除錯(cuò)誤”<

      }

      n=p->link->data;//找到刪除接結(jié)點(diǎn)將數(shù)據(jù)取出并顯示出來(找結(jié)點(diǎn)時(shí)是找的前一個(gè)結(jié)點(diǎn))

      cout<<“被刪除的結(jié)點(diǎn)元素為: ”<

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

      //將刪除結(jié)點(diǎn)的前后結(jié)點(diǎn)鏈接起來

      }

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

      (4)實(shí)驗(yàn)結(jié)果與分析

      ③ 心得體會(huì)

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

      附錄:

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

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

      輸入線性表數(shù)輸出線性表數(shù)據(jù)

      void insert(SeqList &L)//插入數(shù)據(jù) { int a,b,c,k;cout<<“請(qǐng)輸入插入的數(shù)及其插入的位置”<>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)//刪除數(shù)據(jù) { int wei;cout<<“請(qǐng)輸入想要?jiǎng)h除數(shù)據(jù)的位置”<>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<<“開辟空間成功,頭結(jié)點(diǎn)建立”<>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<<“鏈表數(shù)據(jù)為:”<link;while(p!=NULL){ cout<

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

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

      cout<<“請(qǐng)輸入您要插入的結(jié)點(diǎn)位置及插入的數(shù)據(jù)”<>m>>n;p=l;while(p&&ilink;i++;} if(p==NULL){ cout<<“不能在該位置插入,插入錯(cuò)誤”<

      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<<“請(qǐng)輸入想要?jiǎng)h除的結(jié)點(diǎn)位置”<>m;p=l;while(p&&ilink;i++;} if(p==NULL){ cout<<“該結(jié)點(diǎn)不存在,刪除錯(cuò)誤”<link->data;cout<<“被刪除的結(jié)點(diǎn)元素為: ”<link=p->link->link;} void main(){ linklist L;int select;

      L=chushihua();

      while(1){ cout<<“請(qǐng)選擇功能”<>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;} } }

      下載數(shù)據(jù)結(jié)構(gòu)--實(shí)驗(yàn)報(bào)告 線性表的基本操作word格式文檔
      下載數(shù)據(jù)結(jié)構(gòu)--實(shí)驗(yàn)報(bào)告 線性表的基本操作.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(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)容。

      相關(guān)范文推薦

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告二線性表的順序存儲(chǔ)

        實(shí)驗(yàn)報(bào)告二 線性表的順序存儲(chǔ) 班級(jí): 2010XXX 姓名: HoogLe 學(xué)號(hào): 2010XXXX 專業(yè): XXXX 2858505197@qq.com 一、 實(shí)驗(yàn)?zāi)康模?(1) 掌握順序表的基本操作的實(shí)現(xiàn)方法。 (2) 應(yīng)用順序表的基......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告三線性表的鏈?zhǔn)酱鎯?chǔ)(5篇范文)

        實(shí)驗(yàn)報(bào)告三 線性表的鏈?zhǔn)酱鎯?chǔ) 班級(jí): 2010XXX 姓名: HoogLe 學(xué)號(hào): 2010XXXX 專業(yè): XXXX 2858505197@qq.com 一、 實(shí)驗(yàn)?zāi)康模?(1) 掌握單鏈表的基本操作的實(shí)現(xiàn)方法。 (2) 掌握循環(huán)單鏈表......

        數(shù)據(jù)結(jié)構(gòu)二叉樹操作驗(yàn)證實(shí)驗(yàn)報(bào)告

        班級(jí):計(jì)算機(jī)11-2 學(xué)號(hào):40 姓名:朱報(bào)龍成績:_________ 實(shí)驗(yàn)七 二叉樹操作驗(yàn)證 一、 實(shí)驗(yàn)?zāi)康?⑴ 掌握二叉樹的邏輯結(jié)構(gòu); ⑵ 掌握二叉樹的二叉鏈表存儲(chǔ)結(jié)構(gòu); ⑶ 掌握基于二叉鏈表......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

        注意:實(shí)驗(yàn)結(jié)束后提交一份實(shí)驗(yàn)報(bào)告電子文檔 電子文檔命名為“學(xué)號(hào)+姓名”,如:E01214058宋思怡 《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)報(bào)告(一) 學(xué)號(hào):姓名:專業(yè)年級(jí): 實(shí)驗(yàn)名稱:線性表 實(shí)驗(yàn)日期:2014年4月14日......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

        南京信息工程大學(xué)實(shí)驗(yàn)(實(shí)習(xí))報(bào)告 實(shí)驗(yàn)(實(shí)習(xí))名稱數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)(實(shí)習(xí))日期 2011-11-2得分指導(dǎo)教師周素萍 系公共管理系專業(yè)信息管理與信息系統(tǒng)年級(jí)10級(jí)班次1姓名常玲學(xué)號(hào)20102307003......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 一. 題目要求 1)編程實(shí)現(xiàn)二叉排序樹,包括生成、插入,刪除; 2)對(duì)二叉排序樹進(jìn)行先根、中根、和后根非遞歸遍歷; 3)每次對(duì)樹的修改操作和遍歷操作的顯示結(jié)果都需要在......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

        實(shí)驗(yàn)報(bào)告4 排序 一、實(shí)驗(yàn)?zāi)康?1、掌握常用的排序方法,并掌握用高級(jí)語言實(shí)現(xiàn)排序算法的方法。 2、深刻理解排序的定義和各種排序方法的特點(diǎn),并能加以靈活應(yīng)用。 3、了解各種方......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

        數(shù) 據(jù) 結(jié) 構(gòu) 實(shí) 驗(yàn) 報(bào) 告 1.問題描述 為某個(gè)單位建立一個(gè)員工通訊錄管理系統(tǒng),可以方便地查詢每一個(gè)員工的辦公室電話號(hào)碼、手機(jī)號(hào)碼及電子郵箱。 2. 設(shè)計(jì)分析 在本設(shè)計(jì)中,整......