欧美色欧美亚洲高清在线观看,国产特黄特色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)試驗(yàn)報(bào)告一海龜作圖(樣例5)

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

      第一篇:數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告一海龜作圖

      實(shí)驗(yàn)報(bào)告:海龜作圖

      題目:設(shè)計(jì)一個(gè)能夠?qū)崿F(xiàn)海龜抽象數(shù)據(jù)類型Turtle。

      海龜作圖的抽象數(shù)據(jù)類型的定義為:

      ADT Turtle{ 數(shù)據(jù)對象:D={ai |ai∈CharSet,i=1,2,3,…,n n>=0} 數(shù)據(jù)關(guān)系:R1={|ai-1,ai∈D,ai-1

      void StartTurtleGraphics(char name ,int num1,int num2)

      操作結(jié)果:顯示作圖窗口并在窗口內(nèi)寫出本人的姓名name、上機(jī)號num1,實(shí)習(xí)題號num2 void StartTurtle(new Turtle &raphael,aPoint startPos)

      操作結(jié)果:初始化了一個(gè)新海龜,定位在startPos,并置畫筆狀態(tài)為落筆、龜頭朝向?yàn)?,步進(jìn)的尺寸因子為1。

      void PenUp(newturtle &raphael)

      初始條件:海龜已存在。

      操作結(jié)果:設(shè)置畫筆狀態(tài)為抬筆。從此時(shí)起,海龜在屏幕上移動(dòng)時(shí)將不在屏幕上作圖。

      void PenDown(newturtle &raphael)

      初始條件:海龜已存在。

      操作結(jié)果:設(shè)置畫筆狀態(tài)為落筆。從此時(shí)起,海龜在屏幕上移動(dòng)時(shí)將在屏幕上作圖。int TurtleHeading(newturtle &raphael,int single)

      初始條件:海龜已存在。

      操作結(jié)果:返回海龜頭當(dāng)前朝向放角度single。aPoint * TurtlePos(newturtle &raphael)

      初始條件:海龜已存在。

      操作結(jié)果:返回海龜頭當(dāng)前位置。

      void Move(newturtle &raphael,float steps)

      初始條件:海龜已存在。

      操作結(jié)果:依照海龜頭的當(dāng)前朝向,向前移動(dòng)steps步。void Turn(newturtle &raphael,float size)

      初始條件:海龜已存在。

      操作結(jié)果:改變海龜頭的當(dāng)前朝向,逆時(shí)針旋轉(zhuǎn)size度。void ScaleTurtle(newturtle &raphael,float scaleFactor)

      初始條件:海龜已存在。

      操作結(jié)果:改變海龜移動(dòng)的步進(jìn)尺寸SizeFactor,擴(kuò)大scaleFactor倍 viod MoveTTo(newturtle &raphael,aPoint newPos)

      初始條件:海龜已存在。

      操作結(jié)果:將海龜移動(dòng)到新位置newPos,newPos是屏幕窗口的一個(gè)“點(diǎn)”。void TurnTTo(newturtle &raphael,float angle)初始條件:海龜已存在。

      操作結(jié)果:改變海龜頭的當(dāng)前朝向從正東方向起的angle度。viod SetTurtleColor(newturtle &raphael,int color)

      初始條件:海龜已存在。

      操作結(jié)果:設(shè)置海龜筆的當(dāng)前顏色為color。

      void SetTurtleBackColor(newturtle &raphael,int backcolor)

      初始條件:海龜已存在。

      操作結(jié)果:設(shè)置海龜作圖的背景的顏色為backcolor。}

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

      實(shí)驗(yàn)一:ADT的類C描述向C程序的轉(zhuǎn)換實(shí)驗(yàn)(2學(xué)時(shí))

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

      (1)復(fù)習(xí)C語言的基本用法;

      (2)學(xué)會(huì)用類C的語言對算法進(jìn)行描述的方法,將類C算法轉(zhuǎn)換成C源程序的方法和過程;

      (3)抽象數(shù)據(jù)類型的定義和表示、實(shí)現(xiàn);

      (4)加深對數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)之間關(guān)系的理解;(5)初步建立起時(shí)間復(fù)雜度和空間復(fù)雜度的概念。實(shí)驗(yàn)內(nèi)容:(類C算法的程序?qū)崿F(xiàn))(1)輸入一組數(shù)據(jù)存入數(shù)組中,并將數(shù)據(jù)元素的個(gè)數(shù)動(dòng)態(tài)地由輸入函數(shù)完成。求輸入數(shù)據(jù)的最大值、最小值,并通過函數(shù)參數(shù)返回所求結(jié)果; 實(shí)驗(yàn)準(zhǔn)備:

      1)計(jì)算機(jī)設(shè)備;2)程序調(diào)試環(huán)境的準(zhǔn)備,如TC環(huán)境;3)實(shí)驗(yàn)內(nèi)容的算法分析與代碼設(shè)計(jì)與分析準(zhǔn)備。實(shí)驗(yàn)步驟:

      1.安裝TC并設(shè)置好環(huán)境,如果已安裝好,可以跳過此步; 2.錄入程序代碼并進(jìn)行調(diào)試和算法分析;

      對實(shí)驗(yàn)內(nèi)容(1)的操作步驟:1)用類C語言描述算法過程;2)用C語言環(huán)境實(shí)現(xiàn)該算法。

      對實(shí)驗(yàn)內(nèi)容(2)的操作步驟:1)完成算法的C實(shí)現(xiàn);2)分析其時(shí)間復(fù)雜度和空間復(fù)雜度。

      3.編寫實(shí)驗(yàn)報(bào)告。

      實(shí)驗(yàn)結(jié)果:// 動(dòng)態(tài)分配數(shù)組空間 #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(“l(fā)ater 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();}

      實(shí)驗(yàn)結(jié)果:

      實(shí)驗(yàn)二

      線性表及其基本操作實(shí)驗(yàn)(2學(xué)時(shí))實(shí)驗(yàn)?zāi)康模?/p>

      (1)熟練掌握線性表ADT和相關(guān)算法描述、基本程序?qū)崿F(xiàn)結(jié)構(gòu);(2)以線性表的基本操作為基礎(chǔ)實(shí)現(xiàn)相應(yīng)的程序;

      (3)掌握線性表的順序存儲(chǔ)結(jié)構(gòu)和動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)之區(qū)分。

      實(shí)驗(yàn)內(nèi)容:(類C算法的程序?qū)崿F(xiàn),任選其一。具體要求參見教學(xué)實(shí)驗(yàn)大綱)(1)一元多項(xiàng)式運(yùn)算的C語言程序?qū)崿F(xiàn)(加法必做,其它選做);(2)有序表的合并;(3)集合的并、交、補(bǔ)運(yùn)算; 實(shí)驗(yàn)準(zhǔn)備:

      1)計(jì)算機(jī)設(shè)備;2)程序調(diào)試環(huán)境的準(zhǔn)備,如TC環(huán)境;3)實(shí)驗(yàn)內(nèi)容的算法分析與代碼設(shè)計(jì)與分析準(zhǔn)備。實(shí)驗(yàn)步驟:

      1.錄入程序代碼并進(jìn)行調(diào)試和算法分析; 2.編寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)結(jié)果://線性鏈表

      #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 個(gè)元素是:%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 個(gè)元素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 個(gè)位置插入數(shù)據(jù):%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(“請輸入數(shù)組數(shù)據(jù)(共含 %d 個(gè)元):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表示結(jié)束):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(“原線性表數(shù)據(jù)為:n”);Displist(L);

      Getelem(L,3);

      Locatelem(L,2);

      Inselem(L,5,5);

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

      Delelem(L,4);

      Displist(L);}while(Select!=0);return 0;} 運(yùn)行結(jié)果:

      實(shí)驗(yàn)三

      棧和隊(duì)列實(shí)驗(yàn)(6學(xué)時(shí))實(shí)驗(yàn)?zāi)康模?/p>

      (1)熟練掌握棧和隊(duì)列的抽象數(shù)據(jù)類型及其結(jié)構(gòu)特點(diǎn);(2)實(shí)現(xiàn)基本的棧和隊(duì)列的基本操作算法程序。實(shí)驗(yàn)內(nèi)容:(類C算法的程序?qū)崿F(xiàn),任選其一)(1)設(shè)計(jì)與實(shí)現(xiàn)基本的堆棧和隊(duì)列結(jié)構(gòu)下的各種操作(如堆棧的PUSH、POP等操作)(必做);

      (2)以表達(dá)式計(jì)算為例,完成一個(gè)可以進(jìn)行算術(shù)表達(dá)式計(jì)算功能的算法設(shè)計(jì)與實(shí)現(xiàn)(選做); 實(shí)驗(yàn)準(zhǔn)備:

      1)計(jì)算機(jī)設(shè)備;2)程序調(diào)試環(huán)境的準(zhǔn)備,如TC環(huán)境;3)實(shí)驗(yàn)內(nèi)容的算法分析與代碼設(shè)計(jì)與分析準(zhǔn)備。實(shí)驗(yàn)步驟:

      1.錄入程序代碼并進(jìn)行調(diào)試和算法分析; 2.編寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)結(jié)果://隊(duì)列存儲(chǔ) #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”);} 實(shí)驗(yàn)結(jié)果:

      (2)//用棧實(shí)現(xiàn)對表達(dá)式的求值運(yùn)算

      #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(“采用歸并排序?yàn)椋骸?;

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

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

      getchar();

      return 0;}

      實(shí)驗(yàn)結(jié)果:

      實(shí)驗(yàn)十

      查找實(shí)驗(yàn)(2學(xué)時(shí))* 實(shí)驗(yàn)?zāi)康模?/p>

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

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

      實(shí)驗(yàn)內(nèi)容:(類C算法的程序?qū)崿F(xiàn),除順序查找算法之外,任選一個(gè))(1)順序查找算法的實(shí)現(xiàn)(必做);(2)折半查找算法的實(shí)現(xiàn)(選做); 實(shí)驗(yàn)結(jié)果://查找實(shí)驗(yàn)

      1、順序查找:

      #include #define LENGTH 20

      void SequenceSearch(int *fp,int Length){

      int data;

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

      scanf(“%d”,&data);

      for(int i=0;i

      if(fp[i]==data)

      {

      printf(“數(shù)據(jù)%d 是第 %d 個(gè)數(shù)據(jù)n”,data,i+1);

      return;

      }

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

      void main(){

      int count;

      int arr[LENGTH];

      printf(“請輸入你的數(shù)據(jù)的個(gè)數(shù):”);

      scanf(“%d”,&count);

      printf(“請輸入 %d 個(gè)數(shù)據(jù):”,count);

      for(int i=0;i

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

      SequenceSearch(arr,count);}

      實(shí)驗(yàn)結(jié)果:

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

      實(shí)驗(yàn)結(jié)果:

      第三篇:數(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)對順序表,刪除,插入,查找,顯示等操作。

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

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

      for(n=0;n

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

      cin>>L.data[n];

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

      }

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

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

      void insert(SeqList &L)

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

      int a,b,c,k;

      cout<<“請輸入插入的數(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<<“請輸入數(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<<“請輸入想要?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í)給我們詳細(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<<“請輸入線性表長度”<>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<<“請輸入插入的數(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<<“請輸入想要?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<<“請輸入您要插入的結(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<<“請輸入想要?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<<“請選擇功能”<>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;} } }

      第四篇:北京科技大學(xué)數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告(附錄含代碼)

      一、1)功能描述

      輸入數(shù)據(jù)(設(shè)為整型)建立單鏈表,并求相鄰兩節(jié)點(diǎn)data值之和為最大的第一節(jié)點(diǎn)。2)詳細(xì)設(shè)計(jì)

      遵循鏈表建立的基本思想,建立一個(gè)新的鏈表,H為表頭,r為新節(jié)點(diǎn),p為表尾節(jié)點(diǎn)指針,沒存入一個(gè)新的數(shù)據(jù)則申請一個(gè)新的節(jié)點(diǎn),知道沒有數(shù)據(jù)輸入,利用循環(huán)和打擂臺(tái)法,比較和的大小,并輸出。3)測試分析

      程序調(diào)試完成后,選取兩組數(shù)據(jù)進(jìn)行測試,都得出了正確結(jié)果(數(shù)據(jù)以0為結(jié)束符,若有相同和,則取第一組)結(jié)果截圖

      4)心得體會(huì)

      通過做第一題,學(xué)習(xí)到鏈表的建立以及鏈表里指針的使用,并且復(fù)習(xí)了比較法里面的打擂臺(tái)法。

      二、1)功能描述

      實(shí)現(xiàn)算術(shù)表達(dá)式求值程序(棧的運(yùn)用),輸入中綴表達(dá)式,可將其轉(zhuǎn)換成后綴表達(dá)式 2)詳細(xì)設(shè)計(jì)

      本題目的程序是根據(jù)課本上的程序改進(jìn)之后得出的,課本上有完整的程序,但是有bug,按照課本上的程序,結(jié)果會(huì)出現(xiàn)“燙燙燙燙燙”,原因是對于優(yōu)先級的比較沒有處理好,因此加了兩行代碼,將優(yōu)先級的比較處理好,即現(xiàn)在的程序。3)測試分析

      程序調(diào)試完成后,選取題目所給的式子進(jìn)行測試,得出了正確后綴表達(dá)式結(jié)果 結(jié)果截圖

      4)心得體會(huì)

      通過做第二題,對于課本上的知識(shí)表示得出“實(shí)踐出真知”的真理,即使書上的東西也不一定就是正確的,尤其是代碼,最好是個(gè)人自己真正實(shí)踐一下。

      三、1)功能描述

      實(shí)現(xiàn)鏈?zhǔn)疥?duì)列運(yùn)算程序(隊(duì)列的運(yùn)用)2)詳細(xì)設(shè)計(jì)

      本題目是隊(duì)列相關(guān)應(yīng)用,隊(duì)列和棧是相反的,隊(duì)列是先進(jìn)的先出,因此輸入12345,先出的是1,本著隊(duì)列的這一特性,根據(jù)課本所學(xué)的隊(duì)列的算法,設(shè)計(jì)了如下程序。3)測試分析

      程序調(diào)試完成后,選取12345進(jìn)行測試,后綴加0,則一個(gè)字符出隊(duì),只輸入0,則繼續(xù)出隊(duì),輸入@,則打印剩余全部元素。結(jié)果截圖

      4)心得體會(huì)

      通過做第三題,對于隊(duì)列的特點(diǎn)有了更加深刻的認(rèn)識(shí),尤其區(qū)分隊(duì)列與棧的不同點(diǎn),需要特別注意。

      四、1)功能描述

      ①構(gòu)造關(guān)于F的Huffman樹;

      ②求出并打印D總各字符的Huffman編碼。2)詳細(xì)設(shè)計(jì)

      本題目是Huffman樹的應(yīng)用以及Huffman編碼的應(yīng)用,參照課本上關(guān)于Huffman樹的建立以及Huffman編碼的應(yīng)用的實(shí)現(xiàn),將所給數(shù)據(jù)依權(quán)值最小原則建立Huffman樹,并實(shí)現(xiàn)Huffman編碼。3)測試分析

      程序調(diào)試完成后,給出數(shù)據(jù)abcdefgh,相應(yīng)頻率為12345678,運(yùn)行代碼得出結(jié)果如圖。同時(shí)選取另一組數(shù)據(jù)測試也得出了正確結(jié)論

      結(jié)果截圖

      4)心得體會(huì)

      通過做第四題,對于Huffman樹有了更加深刻的體會(huì),同時(shí)練習(xí)也使得對課本知識(shí)進(jìn)行實(shí)踐,有助于更好的理解Huffman樹的算法。

      五、1)功能描述

      設(shè)英文句子:“everyone round you can hear you when you speak.”(1)依次讀入句中各單詞,構(gòu)造一棵二叉排序樹;(2)按LDR遍歷此二叉排序樹。

      LDR: can everyone hear round speak when you(有序)

      2)詳細(xì)設(shè)計(jì)

      本題目是有關(guān)二叉樹的建立和中序遍歷的,二叉樹作為數(shù)據(jù)存儲(chǔ)一個(gè)很重要的結(jié)構(gòu),它的建立也是很重要的。本題目代碼設(shè)計(jì)上采用課本上的對于二叉樹建立的方法,將所給單詞以二叉樹形式建立并存儲(chǔ),然后中序遍歷的到字典順序。3)測試分析

      程序調(diào)試完成后,給出單詞串everyone round you can hear you when you speak,運(yùn)行代碼得出中序遍歷結(jié)果如圖。結(jié)果截圖

      4)心得體會(huì)

      通過做第五題,練習(xí)運(yùn)用二叉樹模型解決了一些實(shí)際問題如現(xiàn)實(shí)中字典的編排問題,在熟悉算法的基礎(chǔ)上,同時(shí)得出結(jié)論,好的算法可以應(yīng)用與實(shí)際生活生產(chǎn),使之更為便捷。

      附錄 程序代碼 實(shí)驗(yàn)一:

      #include“stdio.h” #include“malloc.h” typedef struct node {

      int data;

      struct node *next;}list,*List;List Creatlist()

      //建立鏈表函數(shù) { List H,p,r;

      //H為表頭,r為新節(jié)點(diǎn),p為表尾節(jié)點(diǎn)指針

      H=(List)malloc(sizeof(list));

      //建立頭節(jié)點(diǎn)

      r=H;

      p=(List)malloc(sizeof(list));

      //申請新節(jié)點(diǎn)

      while(scanf(“%d”,p)&&p->data!=0)//輸入數(shù)據(jù),直到為零(結(jié)束標(biāo)志)

      {

      r->next=p;//新節(jié)點(diǎn)鏈入表尾

      r=p;

      p=(List)malloc(sizeof(list));

      } r->next=NULL;//將尾節(jié)點(diǎn)的指針域置空

      return H;

      //返回已創(chuàng)建的頭節(jié)點(diǎn) } List Adjmax(List H)//比較相鄰兩數(shù)之和

      {

      //返回相鄰兩數(shù)之和最大的第一個(gè)數(shù)指針

      List p,r,q;int sum=0;p=H->next;if(H->next ==NULL)//判斷是否為空

      {

      printf(“Empty List!”);

      q=(List)malloc(sizeof(list));

      q->data =0;}

      while(p!=NULL)//比較相鄰兩數(shù)之和

      {

      r=p->next;

      if(p&&r)

      if(r->data+p->data>sum)

      {

      q=p;

      sum=r->data +p->data;}//不斷賦給sum新的最大值

      else;

      p=p->next;} return q;} int main(){ char ch;printf(“/// 請輸入整形數(shù)據(jù),以空格隔開,0結(jié)束。/// n”);printf(“Ready? nY/N(enter 'y' or 'Y' to continue)n”);while(scanf(“%c”,&ch)&&(ch=='Y'||ch=='y'))

      {

      List H,pmax;

      H=Creatlist();

      pmax=Adjmax(H);

      printf(“相鄰兩數(shù)之和最大的第一個(gè)數(shù)為:%dnContinue?

      Y/N

      free(H);

      scanf(”%c“,&ch);} return 0;}

      ”,pmax->data);實(shí)驗(yàn)二:

      #include #include #include typedef struct node //棧節(jié)點(diǎn)類型 { char data;//存儲(chǔ)一個(gè)棧元素

      struct node *next;//后繼指針 }snode,*slink;int Emptystack(slink S)//檢測???{ if(S==NULL)return(1);else return(0);} char Pop(slink*top)//出棧 { char e;slink p;if(Emptystack(*top))return(-1);//??辗祷?/p>

      else {

      e=(*top)->data;//取棧頂元素

      p=*top;*top=(*top)->next;//重置棧頂指針

      free(p);return(e);} } void Push(slink*top,char e)//進(jìn)棧 { slink p;p=(slink)malloc(sizeof(snode));//生成進(jìn)棧p節(jié)點(diǎn)

      p->data=e;//存入元素e p->next=*top;//p節(jié)點(diǎn)作為新的棧頂鏈入

      *top=p;} void Clearstack(slink*top)//置空棧 { slink p;while(*top!=NULL){

      p=(*top)->next;

      Pop(top);//依次彈出節(jié)點(diǎn)直到???/p>

      *top=p;} *top=NULL;} char Getstop(slink S)//取棧頂 { if(S!=NULL)return(S->data);return(0);} //符號優(yōu)先級比較

      int Precede(char x,char y)//比較x是否“大于”y { switch(x){

      case '(':x=0;break;case '+': case '-':x=1;break;case '*': case '/':x=2;break;default: x=-1;} switch(y){ case '+': case '-':y=1;break;case '*': case '/':y=2;break;case '(':y=3;break;default: y=100;} if(x>=y)return(1);else return(0);} //中后序轉(zhuǎn)換

      void mid_post(char post[],char mid[])//中綴表達(dá)式mid到后綴表達(dá)式post的轉(zhuǎn)換的算法 { int i=0,j=0;char x;

      slink S=NULL;//置空棧 Push(&S,'#');//結(jié)束符入棧 do { x=mid[i++];//掃描當(dāng)前表達(dá)式分量x switch(x){ case '#':

      { while(!Emptystack(S))

      post[j++]=Pop(&S);

      }

      }break;case ')':

      { while(Getstop(S)!='(')

      post[j++]=Pop(&S);//反復(fù)出棧直至遇到'('

      Pop(&S);//退掉'('

      }break;case '+': case '-': case '*': case '/': case '(':

      { while(Precede(Getstop(S),x))//棧頂運(yùn)算符(Q1)與x比較

      post[j++]=Pop(&S);//Q1>=x時(shí),輸出棧頂符并退棧

      Push(&S,x);//Q1

      }break;default:post[j++]=x;//操作數(shù)直接輸出

      } }while(x!='#');post[j]='