欧美色欧美亚洲高清在线观看,国产特黄特色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)棧與隊(duì)列報告

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

      第一篇:數(shù)據(jù)結(jié)構(gòu)棧與隊(duì)列報告

      棧和隊(duì)列上機(jī)實(shí)習(xí)

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

      (1)熟練掌握棧的邏輯結(jié)構(gòu)和操作規(guī)則,能在相應(yīng)的實(shí)際問題中正確選用該結(jié)構(gòu)。(2)熟練掌握棧的2種存儲結(jié)構(gòu)實(shí)現(xiàn)方法(順序棧和鏈棧),兩種存儲結(jié)構(gòu)和基本運(yùn)算的實(shí)

      現(xiàn)算法,注意棧空盒滿的判斷條件及它們的描述方法。

      (3)熟練掌握隊(duì)列的邏輯結(jié)構(gòu)和操作規(guī)范,能在相應(yīng)的實(shí)際問題中正確選用該結(jié)構(gòu)。(4)掌握循環(huán)隊(duì)列與鏈隊(duì)列兩種存儲結(jié)構(gòu)的實(shí)現(xiàn),熟練掌握各種隊(duì)列基本運(yùn)算的實(shí)現(xiàn)。

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

      (1)順序棧的插入、刪除,棧頂數(shù)據(jù)元素的讀取。(2)鏈棧的插入、刪除,棧頂數(shù)據(jù)元素的讀取。(3)循環(huán)隊(duì)列的插入、刪除。(4)鏈隊(duì)列的插入、刪除。

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

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

      typedef struct

      {

      ElemType data[MaxSize];

      //棧的空間大小為MaxSize

      int top;

      //設(shè)置棧頂指針

      }SqStack;

      //棧的結(jié)構(gòu)定義

      在本次實(shí)驗(yàn)中,首先建立一個空棧,進(jìn)入主程序后首先初始化棧為其分配空間,然后進(jìn)入菜單選擇界面,通過不同的數(shù)字輸入,實(shí)現(xiàn)入棧,出棧,讀取棧頂元素,顯示棧的所有元素,棧的長度,釋放棧等操作。

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

      在棧結(jié)構(gòu)體的定義中,typedef int Typeelem 為整型,存儲結(jié)構(gòu)(入棧)如下:

      cin>>a;

      s->top++;

      //在入棧是首先將棧頂指針向上加1

      s->data[s->top]=a;

      //與數(shù)組賦值一樣,直接賦值

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

      退棧函數(shù)模塊:

      void Pop(SqStack * &s){

      //對指針的引用

      if(s->top ==-1){

      cout<<“棧是空棧,不能退?!?

      //首先判斷是否為空棧,若為空,則退出

      return;} cout<<“退棧的元素為:”<data[s->top]<

      //顯示退棧元素

      s->top--;

      //棧頂元素減1,指向?qū)嶋H棧的最上面 }

      顯示棧所有元素函數(shù)模塊:

      void DispStack(SqStack *s){

      //從棧頂?shù)綏5醉樞蝻@示所有元素

      int i;cout<<“棧的元素分別為:”<top;i>=0;i--){ cout<data[i]<<“ ”;

      //同過循環(huán)實(shí)現(xiàn)實(shí)現(xiàn)從棧頂元素到棧底元素的遍歷以輸出

      } cout<

      棧結(jié)構(gòu)的入棧和退棧是兩個相反的過程,先進(jìn)后出,入棧是先讓棧頂指針加1,指向未被賦值位置,然后進(jìn)行賦值,退棧是先取出退棧元素,然后棧頂元素減1,指向推展后的實(shí)際棧頂。諸如讀取棧頂元素,顯示棧的元素,讀取棧的長度,都是用過對棧頂指針實(shí)現(xiàn)相關(guān)操作。

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

      ② 循環(huán)隊(duì)列

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

      typedef struct {

      ElemType elem[Maxqsize];

      //循環(huán)隊(duì)列的長度為MaxSize

      int front,rear;

      //設(shè)置隊(duì)列的頭指針和尾指針

      }SqQueue;

      //循環(huán)隊(duì)列的結(jié)構(gòu)體定義

      在本次實(shí)驗(yàn)中,首先建立一個空隊(duì)列,進(jìn)入主程序后首先初始化隊(duì)列為其分配空間,然后進(jìn)入菜單選擇界面,通過不同的數(shù)字輸入,實(shí)現(xiàn)入隊(duì),出隊(duì),顯示隊(duì)列的所有元素,隊(duì)列的長度,釋放隊(duì)列等操作。

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

      在隊(duì)列結(jié)構(gòu)體的定義中,typedef int Typeelem 為整型,存儲(入隊(duì))結(jié)構(gòu)如下:

      q->rear=(q->rear+1)%Maxqsize;

      //尾指針加1

      q->elem[q->rear]=a;

      //將入隊(duì)元素裝到新的空尾部

      在此隊(duì)列的存儲結(jié)構(gòu)的實(shí)現(xiàn):先讓隊(duì)尾指針進(jìn)1,再將新的元素加入到隊(duì)尾指針?biāo)甘镜奈恢?,因此,?duì)尾指針指示實(shí)際的隊(duì)尾位置,隊(duì)頭指針指示實(shí)際隊(duì)頭的前一位置,要想退出隊(duì)頭元素,必須先讓隊(duì)頭指針進(jìn)1,才能取出隊(duì)頭元素。

      退隊(duì)函數(shù)模塊如下:

      void deQueue(SqQueue *&q){

      //對指針的引用

      if(QueueEmpty(q))

      {

      //調(diào)用帶返回值的判斷空隊(duì)函數(shù)

      cout<<“隊(duì)列為空”<

      //判斷隊(duì)列是否為空

      }

      q->front=(q->front+1)%Maxqsize;

      //隊(duì)頭指針進(jìn)1

      cout<<“退隊(duì)的元素為:”<elem[q->front]<

      //取出隊(duì)頭元素 }

      遍歷隊(duì)表函數(shù):

      void displayqueue(SqQueue *q){

      int m;m=q->front+1;

      //隊(duì)頭元素進(jìn)1,指向?qū)嶋H隊(duì)頭

      if(QueueEmpty(q))

      {

      cout<<“隊(duì)列為空”<

      //判斷是夠?yàn)榭贞?duì)

      }

      cout<<“所有隊(duì)列元素為:”<

      while(q->rear+1>m){

      cout<elem[m]<<“ ”;

      //通過循環(huán)遍歷所有元素

      m++;

      }

      cout<

      循環(huán)隊(duì)列的入隊(duì)和退隊(duì)分別是在隊(duì)尾與隊(duì)頭跟別進(jìn)行操作的,通過隊(duì)頭隊(duì)尾指針的操作便可實(shí)現(xiàn)對隊(duì)列的相關(guān)操作。

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

      ③ 心得體會

      本次上機(jī)是做棧與隊(duì)列的操作,這次實(shí)驗(yàn),我有意的用到了對指針的引用與指針實(shí)現(xiàn)子函數(shù)功能的調(diào)用,剛開始編譯的時候也有錯誤,但是在慢慢的摸索中,也逐漸掌握了它們的用法,這次實(shí)驗(yàn)也讓我熟練了對隊(duì)列與棧存儲結(jié)構(gòu)的應(yīng)用。

      附錄:

      順序表源代碼: 棧:

      #include using namespace std;#define MaxSize 5 typedef int ElemType;int e;typedef struct { ElemType data[MaxSize];int top;}SqStack;

      void InitStack(SqStack * &s)

      //建立一個空棧,即將棧頂指針指向-1即可 的引用 { s=(SqStack *)malloc(sizeof(SqStack));s->top=-1;}

      void ClearStack(SqStack * &s)

      //釋放棧s占用的存儲空間 { free(s);}

      void StackLength(SqStack *s)

      { cout<<“棧的長度為:” <<(s->top +1)<

      int StackEmpty(SqStack *s){ return(s->top==-1);}

      void Push(SqStack *&s){ if(s->top==MaxSize-1)

      {

      cout<<“棧滿”<

      //

      s=(SqStack *)realloc(s,sizeof(SqStack));} int a;

      指針

      cout<<“請輸入入棧元素”<>a;s->top++;s->data[s->top]=a;}

      void Pop(SqStack * &s){ if(s->top ==-1){

      cout<<“棧是空棧,不能退?!?

      return;} cout<<“退棧的元素為:”<data[s->top]<top--;}

      void GetTop(SqStack * &s,ElemType &e){ if(s->top==-1){cout<<“空棧”<data[s->top];}

      void DispStack(SqStack *s)

      //從棧頂?shù)綏5醉樞蝻@示所有元素 { int i;cout<<“棧的元素分別為:”<top;i>=0;i--){ cout<data[i]<<“ ”;} cout<

      cout<<“請選擇功能”<

      cout<<“

      入棧

      1”<

      cout<<“

      出棧

      2”<

      cout<<“

      讀取棧頂元素

      3”<

      cout<<“

      顯示棧所有元素

      4”<

      cout<<“

      棧的長度

      5”<

      cout<<“

      釋放棧

      6”<

      cin>>k;

      switch(k)

      {

      case 1: Push(s);break;

      case 2: Pop(s);break;

      case 3: GetTop(s,e);cout<<“棧頂元素為: ”<

      case 4: DispStack(s);break;

      case 5: StackLength(s);break;

      case 6: ClearStack(s);break;

      default :break;

      } } }

      隊(duì)列:

      #include using namespace std;#define Maxqsize 8 typedef int TypeElem;typedef struct {

      TypeElem elem[Maxqsize];

      int front,rear;}SqQueue;void InitQueue(SqQueue *&q){

      q=(SqQueue *)malloc(sizeof(SqQueue));

      q->front=q->rear=0;} void ClearQueue(SqQueue *&q){

      free(q);exit(0);} void QueueLength(SqQueue *q){

      cout<<“隊(duì)列長度為:”<<(q->rear-q->front+Maxqsize)%Maxqsize<

      return(q->front==q->rear);

      } void enQueue(SqQueue *&q){ int a;

      if((q->rear+1)%Maxqsize==q->front)

      {

      cout<<“隊(duì)列已滿,無法插入”<

      }

      cout<<“請輸入插入元素”<

      cin>>a;

      q->rear=(q->rear+1)%Maxqsize;

      q->elem[q->rear]=a;} void deQueue(SqQueue *&q){

      if(QueueEmpty(q))

      {

      cout<<“隊(duì)列為空”<

      }

      q->front=(q->front+1)%Maxqsize;

      cout<<“退隊(duì)的元素為:”<elem[q->front]<

      }

      void displayqueue(SqQueue *q){

      int m;m=q->front+1;

      if(QueueEmpty(q))

      {

      cout<<“隊(duì)列為空”<

      }

      cout<<“所有隊(duì)列元素為:”<

      while(q->rear+1>m)

      {

      cout<elem[m]<<“ ”;

      m++;

      }

      cout<

      int k=0;

      SqQueue *q;

      InitQueue(q);

      if(QueueEmpty(q))cout<<“隊(duì)列為空”<

      while(1){

      cout<<“請選擇功能”<

      cout<<“

      入隊(duì)

      cout<<”

      出隊(duì)

      cout<<“

      隊(duì)列長度

      cout<<”

      顯示隊(duì)列元素

      cout<<“

      釋放棧

      cin>>k;

      switch(k)

      {

      case 1: enQueue(q);break;

      case 2: deQueue(q);break;

      case 3: QueueLength(q);break;

      case 4: displayqueue(q);break;

      case 5: ClearQueue(q);break;

      default :break;

      } } }

      1”<

      2“<

      4“<

      第二篇:2數(shù)據(jù)結(jié)構(gòu)-實(shí)驗(yàn)報告二(棧和隊(duì)列及其應(yīng)用)

      實(shí)驗(yàn)二 棧和隊(duì)列及其應(yīng)用

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

      1.掌握棧和隊(duì)列這兩種抽象數(shù)據(jù)類型的特點(diǎn),并能在相應(yīng)的應(yīng)用問題中正確選用它們。

      2.熟練掌握棧類型的兩種實(shí)現(xiàn)方法。

      3.熟練掌握循環(huán)隊(duì)列和鏈隊(duì)列的基本操作實(shí)現(xiàn)算法。

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

      用隊(duì)列求解迷宮問題 [問題描述] 以一個M*N的長方陣表示迷宮,0和1分別表示迷宮中的通路和墻壁。設(shè)計一個程序,對任意設(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論。[基本要求] 實(shí)現(xiàn)一個以順序存儲結(jié)構(gòu)的隊(duì)列類型,然后編寫一個求解迷宮的非遞歸程序。求得的通路以三元組(i,j,pre)的形式輸出,其中:(i,j)指示迷宮中的一個坐標(biāo),pre表示本路徑中上一個方塊在隊(duì)列中的下標(biāo)。

      [測試數(shù)據(jù)] 由學(xué)生任意指定。

      三、源代碼

      # include #define M 5 #define N 5

      //行數(shù) //列數(shù)

      //隊(duì)最多元素個數(shù)

      //一個迷宮,其四周要加上均為1的外框{1,1, #define MaxSize 100 int mg[M+2][N+2]={ {1,1,1,1,1,1,1}, {1,0,0,0,0,0,1}, {1,0,1,0,0,1,1}, {1,0,1,0,0,1,1}, {1,0,1,0,1,0,1}, {1,0,0,0,0,0,1}, {1,1,1,1,1,1,1} };

      typedef struct {int i,j;int pre;} Box;typedef struct { Box data[MaxSize];int front, rear;}QuType;void mgpath1(int xi,int yi,int xe,int ye)//搜索路徑為:(xi,yi){ void print(QuType qu, int front);->(xe,ye)

      int i,j,find=0,di;QuType qu;//定義順序隊(duì) qu.front=qu.rear=-1;qu.rear++;qu.data[qu.rear].i=xi;//(xi,yi)進(jìn)隊(duì) qu.data[qu.rear].j=yi;qu.data[qu.rear].pre=-1;mg[xi][yi]=-1;while(qu.front!=qu.rear&&!find){qu.front++;i=qu.data[qu.front].i;j=qu.data[qu.front].j;if(i==xe&&j==ye){find=1;print(qu,qu.front);

      }

      for

      (di=0;di<4;di++)

      {

      switch(di)

      {

      case 0 :i=qu.data[qu.front].i-1;j=qu.data[qu.front].j;break;case 1 :i=qu.data[qu.front].i;j=qu.data[qu.front].j+1;break;case 2 :i=qu.data[qu.front].i+1;j=qu.data[qu.front].j+1;break;case 3 :i=qu.data[qu.front].i;j=qu.data[qu.front].j-1;break;

      }

      if(mg[i][j]==0)

      {find=1;

      qu.rear++;

      qu.data[qu.rear].i=i;qu.data[qu.rear].j=j;

      qu.data[qu.rear].pre=qu.front;

      mg[i][j]=-1;

      }

      } } }

      void print(QuType qu, int front){

      int k=front,j,ns=0;

      printf(“n”);do

      {j=k;

      k=qu.data[k].pre;

      qu.data[j].pre=-1;

      } while(k!=0);printf(“迷宮路徑如下:n”);k=0;while(k

      ns++;

      printf(“t(%d,%d)”,qu.data[k].i,qu.data[k].j);

      if(ns%5==0)printf(“n”);} k++;} printf(“n”);} void main()

      { mgpath1(1,1,M,N);printf(“迷宮所有路徑如下:n”);

      }

      四、測試結(jié)果:

      五、心得體會

      做實(shí)驗(yàn)首先要掌握大量的理論知識,然后認(rèn)真去完成實(shí)驗(yàn)。做實(shí)驗(yàn)過程會碰見較大的困難,這就要需要我們的毅力。小小的迷宮隱藏大大的奧秘。

      第三篇:實(shí)驗(yàn)三 棧和隊(duì)列

      實(shí)驗(yàn)報告三 棧和隊(duì)列

      班級: 姓名: 學(xué)號: 專業(yè):

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

      (1)掌握棧的基本操作的實(shí)現(xiàn)方法。

      (2)利用棧先進(jìn)后出的特點(diǎn),解決一些實(shí)際問題。(3)掌握鏈?zhǔn)疥?duì)列及循環(huán)隊(duì)列的基本操作算法。(4)應(yīng)用隊(duì)列先進(jìn)先出的特點(diǎn),解決一些實(shí)際問題。

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

      1、使用一個棧,將一個十進(jìn)制轉(zhuǎn)換成二進(jìn)制。粘貼源程序:

      package Word1;

      public class Node {

      } T data;Node next;public Node(T a){ } public Node(T a,Node n){

      } this.data=a;this.next=n;this(a,null);

      -----package Word1;

      public class Stack {

      } public Node Top;public Stack(){ } public void push(T a){ } public T Out(){

      }

      T a=this.Top.data;this.Top=this.Top.next;return a;this.Top=new Node(a,this.Top);this.Top=null;

      --package Word1;

      import java.util.*;

      public class Test {

      } static Scanner scan=new Scanner(System.in);static int temp=0;static int a=0;static Stack s=new Stack();public static void main(String[] args){

      } temp=scan.nextInt();while(true){

      } while(s.Top!=null){

      } System.out.printf(“%d”,s.Out());a=temp%2;s.push(a);temp=temp/2;if(temp==0)break;

      粘貼測試數(shù)據(jù)及運(yùn)行結(jié)果:

      2、回文是指正讀反讀均相同的字符序列,如“acdca”、“dceecd”均是回文,但“book”不是回文。利用1中的基本算法,試寫一個算法判定給定的字符串是否為回文。(提示:將一半字符入棧,依次彈出與另一半逐個比較)粘貼源程序:---------package Word1;

      import java.util.*;public class Test1 {

      } static Scanner sc=new Scanner(System.in);static char[] c={'a','b','c','b','a'};static Stack s=new Stack();public static void main(String[] args){

      } public static String One(){

      } public static String Two(){

      } for(int i=0;i<(c.length/2);i++){ } for(int i=c.length/2;i

      } return “該字符串是回文”;if(s.Out()!=c[i])return “該字符不是回文”;s.push(c[i]);for(int i=0;i<(c.length/2);i++){ } for(int i=c.length/2+1;i

      } return “該字符串是回文”;if(s.Out()!=c[i])return “該字符串不是回文”;s.push(c[i]);if(c.length%2!=0){

      } else{ } System.out.println(Two());System.out.println(One());

      -------------

      粘貼測試數(shù)據(jù)及運(yùn)行結(jié)果:

      3、使用3個隊(duì)列分別保留手機(jī)上最近10個“未接來電”、“已接來電”、“已撥電話”。

      粘貼源程序:

      package Word3;

      import java.util.*;

      public class Queue {

      LinkedList list;public Queue(){ } public void enQ(E a){ } public E deQ(){ } public boolean isEmpty(){ } public void Pri(){ while((list.isEmpty()))return list.isEmpty();return list.removeLast();list.addLast(a);list=new LinkedList();

      } } System.out.printf(“%d n”,this.deQ());

      package Word3;

      import java.util.*;

      public class Test {

      static Queue list1=new Queue();static Queue list2=new Queue();static Queue list3=new Queue();static Scanner sc=new Scanner(System.in);public static void main(String[] args){ } public static void Frame(){

      } static private void T2(){

      int c;int[] a={22324,321321,222333};for(int i=0;i

      1、查詢

      2、增加”);c=sc.nextInt();if(c==1){

      } else{ c=sc.nextInt();while(!(list2.isEmpty()))System.out.printf(“%d n”,list2.deQ());list2.enQ(a[i]);int c=0;System.out.println(“請選擇記錄類型:”);System.out.println(“

      1、未接來電

      2、已接來電

      3、已撥電話”);switch(c=sc.nextInt()){

      } case 1:T1();break;case 2:T2();break;case 3:T3();break;Frame();

      }

      } list2.enQ(c);while(!(list2.isEmpty()))System.out.printf(“%d n”,list2.deQ());sc.close();static private void T3(){

      } static private void T1(){

      int c;int[] a={12324,321321,222333};for(int i=0;i

      1、查詢

      2、增加”);c=sc.nextInt();if(c==1){

      } else{ c=sc.nextInt();while(!(list1.isEmpty()))System.out.printf(“%d n”,list1.deQ());list1.enQ(a[i]);int c;int[] a={32324,321321,222333};for(int i=0;i

      1、查詢

      2、增加”);c=sc.nextInt();if(c==1){

      } else{

      } sc.close();c=sc.nextInt();list3.enQ(c);while(!(list3.isEmpty()))System.out.printf(“%d n”,list3.deQ());while(!(list3.isEmpty()))System.out.printf(“%d n”,list3.deQ());list3.enQ(a[i]);

      }

      }

      } list1.enQ(c);while(!(list1.isEmpty()))System.out.printf(“%d n”,list1.deQ());sc.close();

      粘貼測試數(shù)據(jù)及運(yùn)行結(jié)果:

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

      第四篇:數(shù)據(jù)結(jié)構(gòu) 隊(duì)列實(shí)驗(yàn)報告

      隊(duì)列實(shí)驗(yàn)報告

      小組成員:xxxxxxxx日期:xxxxxxxx

      一、需求分析(xxx)

      1.鏈隊(duì)列

      1)在本演示程序中,首先要鏈隊(duì)列添加一個頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,它只允許在表的一端進(jìn)行插入,而在另一端刪除元素,允許插入的一段叫隊(duì)尾,允許刪除的一端則為對頭,接著訪問隊(duì)列中所有元素,并輸出,輸出是每個元素之間用空格來完成。最后銷毀隊(duì)列,釋放空間。2)演示程序以用戶和計算機(jī)的對話方式執(zhí)行,即在計算機(jī)終端上顯示“歡迎來到鏈隊(duì)列”“元素入隊(duì)”“元素出隊(duì)”“銷毀隊(duì)列”“清空隊(duì)列”之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。3)程序執(zhí)行的命令包括: 歡迎來到鏈隊(duì)列 1輸出隊(duì)列長度 2元素入隊(duì) 3元素出隊(duì) 4銷毀隊(duì)列 5清空隊(duì)列 6對頭元素 7退出鏈隊(duì)列 4)測試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行“元素入隊(duì)”“元素出隊(duì)”“銷毀隊(duì)列”“清空隊(duì)列”等操作。2.順序隊(duì)列

      1)在本演示程序中,首先要順序隊(duì)列添加一個頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,它只允許在表的一端進(jìn)行插入,而在另一端刪除元素,允許插入的一段叫隊(duì)尾,允許刪除的一端則為對頭,接著訪問隊(duì)列中所有元素,并輸出,輸出是每個元素之間用空格來完成。2)演示程序以用戶和計算機(jī)的對話方式執(zhí)行,即在計算機(jī)終端上顯示“歡迎來到鏈隊(duì)列”“元素入隊(duì)”“元素出隊(duì)”“取得頭結(jié)點(diǎn)”“輸出顯示”之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。3)程序執(zhí)行的命令包括: 歡迎來到順序隊(duì)列 1入隊(duì) 2出隊(duì)

      3判斷是否為空 4取得頭結(jié)點(diǎn) 5輸出顯示 6退出順序隊(duì)列 4)測試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行“元素入隊(duì)”“元素出隊(duì)”等操作。3循環(huán)隊(duì)列

      1)在本演示程序中,首先要順序隊(duì)列添加一個頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,初始化建空隊(duì)列時,令front=rear=0,每當(dāng)插入新的隊(duì)列尾元素時,“尾指針增1”;每當(dāng)刪除隊(duì)列頭元素時,“頭指針增1”。接著訪問隊(duì)列中所有元素,并輸出,輸出是每個元素之間用空格來完成。2)演示程序以用戶和計算機(jī)的對話方式執(zhí)行,即在計算機(jī)終端上顯示“歡迎來到鏈隊(duì)列”“元素入隊(duì)”“元素出隊(duì)”“取得頭結(jié)點(diǎn)”“輸出顯示”之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。3)程序執(zhí)行的命令包括: 歡迎來到循環(huán)隊(duì)列 1入隊(duì) 2出隊(duì)

      3判斷是否為空 4取得頭結(jié)點(diǎn) 5輸出顯示 6退出順序隊(duì)列 4)測試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行“元素入隊(duì)”“元素出隊(duì)”等操作。

      二.概要設(shè)計(xxxx)

      ⒈ 為實(shí)現(xiàn)上述算法,需要順序表的抽象數(shù)據(jù)類型,抽象數(shù)據(jù)類型定義如下:

      ADT Queue { 數(shù)據(jù)對象:D={ ai|ai∈ElemSet, i=1,2,3...,n, n>=0 } 數(shù)據(jù)關(guān)系: R={ |ai-1,ai∈D,i=2,...,n } 基本操作: InitQueue(&Q)操作結(jié)果:構(gòu)造一個空隊(duì)列。DestroyQueue(&Q)初始條件:隊(duì)列Q已存在。

      操作結(jié)果:隊(duì)列Q已被銷毀。ClearQueue(&Q)初始條件:隊(duì)列Q已存在。

      操作結(jié)果:將Q清為空隊(duì)列。QueueEmpty(Q)初始條件:隊(duì)列Q已存在。

      操作結(jié)果:若Q為空隊(duì)列,則返回TRUE,否則FALSE。QueueLength(Q)初始條件:隊(duì)列Q已存在。

      操作結(jié)果:返回Q元素的個數(shù),即隊(duì)列的長度。GetHead(Q,&e)初始條件:Q為非空隊(duì)列。

      操作結(jié)果:用e返回Q的隊(duì)頭元素。EnQueue(&Q,e)初始條件:隊(duì)列Q已存在。

      操作結(jié)果:插入e返回Q的新的隊(duì)尾元素。DeQueue(&Q,&e)初始條件:Q為非空隊(duì)列。

      操作結(jié)果:刪除Q的隊(duì)頭元素,并用e返回其值。}ADT Queue

      2.單鏈隊(duì)列

      typedefstructQNode { QElemType;structQNode *next;//指針域 }QNode,*QueuePtr;Typedefstruct{ QueuePtr front;QueuePtr rear;}LinkQueue;Status InitQueue(LinkQueue&Q)//構(gòu)造一個空隊(duì)列。

      Status DestroyQueue(LinkQueue&Q)//銷毀隊(duì)列Q,Q不存在。

      Status ClearQueue(LinkQueue&Q)//將Q清為空隊(duì)列。

      Status QueueEmpty(LinkQueueQ)//若Q為空隊(duì)列,則返回TRUE,否則FALSE。intQueueLength(LinkQueueQ)//返回Q元素的個數(shù),即隊(duì)列的長度。

      Status GetHead(LinkQueueQ,QElemType&e)//若隊(duì)列不為空,則用e返回Q的隊(duì)頭元素,并返回OK;否則返回ERROR。

      Status EnQueue(LinkQueue&Q,QElemType e)//插入e返回Q的新的隊(duì)尾元素。

      Status DeQueue(LinkQueue&Q,QElemType&e)//若隊(duì)列不空,則刪除Q的隊(duì)頭元素,并用e返回其值,并返回OK;否則返回ERROR。

      三.詳細(xì)設(shè)計(xxx)

      1.順序隊(duì)列的實(shí)現(xiàn)和運(yùn)算

      1)元素的類型 typedefstruct { Datatypedata[MAXSIZE];intfront,rear;}Squeue;2)空的隊(duì)列的構(gòu)造

      void InitSqueue(Squeue *p)/*初始化隊(duì)列*/ { p->front=0;p->rear=0;} 3)元素的入隊(duì)

      int Ensqueue1(Squeue1 *q, Datatype e)/*入隊(duì)*/ { if((q->rear+1)% MAXSIZE == q->front){ printf(“n隊(duì)列已滿n”);return 0;} 4)元素的出隊(duì)

      int DeSqueue1(Squeue1 *q,Datatype *e)/*出隊(duì)*/ { if(q->front==q->rear){ printf(“隊(duì)列已空,無法出隊(duì)!”);return 0;} *e=q->data[q->front];q->front=(q->front+1)%MAXSIZE;return 1;} 5)判斷隊(duì)列是否為空

      int QueueEmpty1(Squeue1 q)// 判斷是否為空 { if(q.front==q.rear)return 1;else return 0;} 6)隊(duì)頭元素的取值的算法

      int Gethead1(Squeue1 *q,Datatype *e)// 取對頭元素 { if(q->front==q->rear){ printf(“隊(duì)列已空,無法出隊(duì)!”);return 0;} else *e=q->data[q->front];return 1;} 7)遍歷順序隊(duì)列的算法

      void display1(Squeue1 q)//遍歷順序?qū)α? { printf(“此隊(duì)列數(shù)據(jù)為:n”);if(q.front==q.rear)printf(“此隊(duì)列為空!”);else { while(q.front

      void InitQueue2(LinkQueue *q){ // 構(gòu)造一個空隊(duì)列Q q->front=q->rear=malloc(sizeof(QNode));if(!q->front)exit(1);q->front->next=NULL;} 2)元素的入隊(duì)算法

      void EnQueue2(LinkQueue *q, QElemType e)//將元素e進(jìn)隊(duì) { QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));//創(chuàng)建新節(jié)點(diǎn)

      if(!p)//如果內(nèi)存分配成功

      exit(1);

      p->data=e;//初始化新節(jié)點(diǎn)數(shù)據(jù)為e p->next=NULL;

      q->rear->next=p;

      q->rear=p;} 3)元素的出隊(duì)的算法

      int DeQueue2(LinkQueue *q,QElemType e)//隊(duì)頭結(jié)點(diǎn)出隊(duì),將出隊(duì)的元素存入e { QueuePtr p;if(q->front==q->rear)//隊(duì)列為空

      return 0;p=q->front->next;//初始化temp為要出隊(duì)的結(jié)點(diǎn)指針

      if(q->front->next==q->rear)//要出隊(duì)的結(jié)點(diǎn)為最后一個結(jié)點(diǎn)

      q->rear=q->front;e=p->data;//要出隊(duì)的數(shù)據(jù)元素為e q->front->next=p->next;//使下一個結(jié)點(diǎn)變?yōu)閷︻^

      free(p);//刪除要出隊(duì)的結(jié)點(diǎn)

      return e;} 4)隊(duì)列的長度算法

      void QueueLength2(LinkQueue *q)//返回隊(duì)列長度 { QueuePtr p;int i=0;p=q->front->next;while(p){

      ++i;

      p=p->next;} printf(“鏈隊(duì)列長度為:%dn”,i);} 5)隊(duì)列的銷毀

      void DestroyQueue2(LinkQueue *q){ while(q->front){

      q->rear=q->front->next;

      free(q->front);

      q->front=q->rear;

      if(!q->rear)

      free(q->rear);} free(q->front);} 6)隊(duì)列的輸出算法

      void output2(LinkQueue *q)//輸出隊(duì)列 { QueuePtr p;p=q->front->next;printf(“鏈隊(duì)列元素依次為:”);while(p){

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

      p=p->next;} printf(“n”);} 7)隊(duì)列的清空的算法 void Clear2(LinkQueue *q)//清空隊(duì)列 { QueuePtr temp=q->front->next;while(temp){

      QueuePtrtp=temp;

      temp=temp->next;

      free(tp);} temp=q->front;

      q->front=q->rear=NULL;free(temp);} 8)返回對頭元素的算法

      int GetHead2(LinkQueue *q, int *e)//返回對頭結(jié)點(diǎn)元素,存入e { if(q->front==q->rear)

      return 0;*e=q->front->next->data;return 1;} 3.循環(huán)隊(duì)列的實(shí)現(xiàn)和運(yùn)算 1)隊(duì)列的初始化算法

      void InitSqueue3(Squeue3 *p)/*初始化隊(duì)列*/ { p->base=(Datatype *)malloc(sizeof(Datatype)* MAXSIZE);p->front=0;p->rear=0;} 2)入隊(duì)的算法

      int Ensqueue3(Squeue3 *q, Datatype e)/*入隊(duì)*/ { if((q->rear+1)% MAXSIZE == q->front){ printf(“n隊(duì)列已滿n”);return 0;} else q->base[q->rear]=e;/*將接收到得值付給隊(duì)尾所指的節(jié)點(diǎn)*/ q->rear=(q->rear+1)% MAXSIZE;/*隊(duì)尾向后移一位完成入隊(duì)*/ return 1;} 3)出隊(duì)的算法

      int DeSqueue3(Squeue3 *q,Datatype *e)/*出隊(duì)*/ { if(q->front==q->rear){ printf(“隊(duì)列已空,無法出隊(duì)!”);return 0;} *e=q->base[q->front];q->front=(q->front+1)%MAXSIZE;return 1;} 4判斷隊(duì)列是否為空的算法

      int QueueEmpty3(Squeue3 q)// 判斷是否為空 { if(q.front==q.rear)return 1;else return 0;} 5)對頭元素的返還的算法

      int Gethead3(Squeue3 *q,Datatype *e)// 取對頭元素 { if(q->front==q->rear){ printf(“隊(duì)列已空,無法出隊(duì)!”);return 0;} else *e=q->base[q->front];return 1;} 6)遍歷循環(huán)隊(duì)列的算法

      void display3(Squeue3 *q)//遍歷循環(huán)對列 { int tail;tail=q->front;printf(“此隊(duì)列數(shù)據(jù)為:n”);if(q->front==q->rear)printf(“此隊(duì)列為空!”);else { while(tail!=q->rear){ printf(“%dt”, q->base[tail]);tail=(tail+1)%MAXSIZE;} printf(“n”);} } 4.主函數(shù)的算法 void main(){

      int choice;Datatype e1;int i1,a1,x1,s1,j1;//順序隊(duì)列定義的量 int e2,i2,n2,s2,a2;//鏈隊(duì)列定義的量

      int i3,a3,x3,s3,j3;//循環(huán)隊(duì)列定義的量 Datatype e3;

      Squeue1 Q1;

      //******************************* LinkQueue q;

      //******************************** Squeue3 Q;

      //**************************** choice=-1;Begin();while(choice!=0){ scanf(“%d”,&choice);switch(choice){ case 1://順序隊(duì)列

      {

      system(“cls”);InitSqueue1(&Q1);printf(“創(chuàng)建隊(duì)列完成!n”);printf(“請輸入數(shù)據(jù)個數(shù)j1=”);scanf(“%d”,&j1);for(i1=1;i1<=j1;i1++)//輸入的數(shù)據(jù)個數(shù)不要超過MAXSIZE,多了的部分沒有插入隊(duì)列

      { printf(“請輸入第%d個數(shù)據(jù):”,i1);scanf(“%d”,&a1);Ensqueue1(&Q1,a1);

      } printf(“對頭為:%dn”,Q1.data[Q1.front]);printf(“隊(duì)尾為:%dn”,Q1.data[Q1.front+j1-1]);display1(Q1);s1=-1;start1();while(s1!=0)

      {

      scanf(“%d”,&s1);switch(s1)

      { case 0:

      system(“cls”);

      choice=-1;

      Begin();

      break;case 1:

      {

      system(“cls”);printf(“請輸入入隊(duì)元素:n ”);scanf(“%d”,&x1);Ensqueue1(&Q1,x1);display1(Q1);

      s1=-1;

      start1();break;

      } case 2:

      { system(“cls”);DeSqueue1(&Q1,&e1);display1(Q1);s1=-1;

      start1();break;

      } case 3:

      {

      system(“cls”);if(QueueEmpty1(Q1))printf(“此隊(duì)列為空!n”);else printf(“此隊(duì)列不為空!n”);

      }

      s1=-1;

      start1();break;case 4:

      { system(“cls”);

      Gethead1(&Q1,&e1);printf(“對頭元素為:%dn”,e1);

      s1=-1;

      start1();break;

      } case 5:

      { system(“cls”);display1(Q1);s1=-1;

      start1();break;

      }

      }//switch

      } //while

      }//case1

      break;//************************************************* case 2:

      {

      system(“cls”);

      InitQueue2(&q);printf(“創(chuàng)建隊(duì)列完成!n”);printf(“輸入將建立鏈隊(duì)列元素的個數(shù):n2=”);scanf(“%d”,&n2);printf(“請輸入隊(duì)列的元素:n”);for(i2=1;i2<=n2;i2++)

      {

      printf(“請輸入第%d個元素:”,i2);

      scanf(“%d”,&e2);

      EnQueue2(&q,e2);

      } a2=-1;start2();while(a2!=0)

      {

      scanf(“%d”,&a2);

      switch(a2)

      {

      case 1:system(“cls”);

      QueueLength2(&q);

      a2=-1;start2();

      break;

      case 2:{

      system(“cls”);

      printf(“請輸入入隊(duì)元素:”);

      scanf(“%d”,&e2);EnQueue2(&q,e2);

      output2(&q);a2=-1;start2();

      }break;

      case 3:

      system(“cls”);

      e2=DeQueue2(&q,e2);

      output2(&q);

      printf(“出隊(duì)元素為:%dn”,e2);a2=-1;start2();

      break;

      case 4:DestroyQueue2(&q);printf(“隊(duì)列已銷毀!n”);

      a2=0;system(“cls”);

      choice=-1;

      Begin();

      break;

      case 5:

      Clear2(&q);printf(“隊(duì)列已清空n”);

      a2=0;system(“cls”);

      choice=-1;

      Begin();

      break;

      case 6:

      system(“cls”);GetHead2(&q,&e2);

      printf(“隊(duì)頭元素為:%dn”,e2);s2=-1;

      start2();

      break;

      case 0: system(“cls”);

      choice=-1;

      Begin();

      break;

      }//switch }//while

      }//case2

      break;//**************************************************

      case 3:

      {

      system(“cls”);

      InitSqueue3(&Q);printf(“創(chuàng)建隊(duì)列完成!n”);printf(“請輸入數(shù)據(jù)個數(shù)j3=”);scanf(“%d”,&j3);for(i3=1;i3<=j3;i3++)//輸入的數(shù)據(jù)個數(shù)不要超過MAXSIZE,多了的部分沒有插入隊(duì)列

      { printf(“請輸入第%d個數(shù)據(jù):”,i3);scanf(“%d”,&a3);Ensqueue3(&Q,a3);

      } printf(“對頭為:%dn”,Q.base[Q.front]);printf(“隊(duì)尾為:%dn”,Q.base[Q.front+j3-1]);display3(&Q);s3=-1;start3();while(s3!=0)

      {

      scanf(“%d”,&s3);switch(s3)

      { case 0:

      system(“cls”);

      choice=-1;

      Begin();

      break;case 1:

      {

      system(“cls”);printf(“請輸入入隊(duì)元素:n ”);scanf(“%d”,&x3);Ensqueue3(&Q,x3);display3(&Q);

      s3=-1;

      start3();break;

      } case 2:

      { system(“cls”);DeSqueue3(&Q,&e3);display3(&Q);s3=-1;

      start3();break;

      } case 3:

      { system(“cls”);if(QueueEmpty3(Q))printf(“此隊(duì)列為空!n”);else printf(“此隊(duì)列不為空!n”);

      }

      s3=-1;

      start3();break;case 4:

      { system(“cls”);

      Gethead3(&Q,&e3);printf(“對頭元素為:%dn”,e3);

      s3=-1;

      start3();break;

      } case 5:

      { system(“cls”);display3(&Q);s3=-1;

      start3();break;

      }

      }//switch

      } //while

      }//case 3

      break;

      case 0:

      printf(“ 謝謝使用??!n”);

      break;

      //***************************

      }//switch }//while }//main

      四.調(diào)試分析(xxx)

      順序隊(duì)列

      1.編譯并調(diào)試,運(yùn)行程序。

      2.設(shè)計測試用例,分析測試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。3.判斷隊(duì)列是否為空。隊(duì)列是否為空的標(biāo)志就是隊(duì)頭指針和隊(duì)尾指針是否同時指向隊(duì)列中的同一個位置,即隊(duì)頭指針和隊(duì)尾指針是否相等。

      4.隊(duì)列滿時候不能入隊(duì)列,否則會出現(xiàn)溢出現(xiàn)象。即先要判斷隊(duì)列是否已經(jīng)已滿,因?yàn)殛?duì)尾指針的最大值是MAXQSIZE,所以通過檢查隊(duì)尾指針rear是否等于MAXQSIZE來判斷隊(duì)列是否已滿。在刪除隊(duì)首元素時,應(yīng)首先通過隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空。

      5.在元素出隊(duì)操作,先通過隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空,空時不能操作,這是要注意的。

      6.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)行人機(jī)交互,在后來的程序中將會做些改進(jìn),以增強(qiáng)人機(jī)交互性。

      7.本程序存在較多不足,如有問題,參考用戶手冊。

      8.在程序語句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過改進(jìn),目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。

      鏈隊(duì)列

      1.編譯并調(diào)試,運(yùn)行程序。2.設(shè)計測試用例,分析測試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。

      3.要注意設(shè)定一個在鏈隊(duì)列添加一個頭結(jié)點(diǎn)并令指針指向頭結(jié)點(diǎn)。同時,刪除不可以在最后面進(jìn)行刪除,但是插入可以最后一個進(jìn)行插入,這點(diǎn)需要注意 4.需要分別指向隊(duì)頭和隊(duì)尾的指針。

      5.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)行人機(jī)交互,在后來的程序中將會做些改進(jìn),以增強(qiáng)人機(jī)交互性。

      6.本程序存在較多不足,如有問題,參考用戶手冊。

      7.在程序語句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過改進(jìn),目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。

      循環(huán)隊(duì)列

      1.編譯并調(diào)試,運(yùn)行程序。

      2.設(shè)計測試用例,分析測試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。

      3.為了避免順序隊(duì)列造成的“假溢出”現(xiàn)象,我們通常采用順序循環(huán)隊(duì)列實(shí)現(xiàn)隊(duì)列的順序存儲。4.隊(duì)頭指針和對尾指針與隊(duì)列元素之間關(guān)系和順序隊(duì)列一樣,不變。5.先判斷隊(duì)列是否為空。就是看隊(duì)頭指針和隊(duì)尾指針是否同時指向隊(duì)列中的同一個位置,即隊(duì)頭指針和隊(duì)尾指針是否相等,空時不能操作,這是要注意的。

      6.在將元素插入到隊(duì)列之前首先要判斷隊(duì)列是否已經(jīng)已滿,根據(jù)順序循環(huán)隊(duì)列隊(duì)滿條件front==(rear+1)%MAXQSIZE來判斷隊(duì)列是否已滿。在刪除隊(duì)首元素時,應(yīng)首先通過隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空。

      6.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)行人機(jī)交互,在后來的程序中將會做些改進(jìn),以增強(qiáng)人機(jī)交互性。

      7.本程序存在較多不足,如有問題,參考用戶手冊。

      8.在程序語句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過改進(jìn),目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。

      五、用戶手冊(xx)1.鏈隊(duì)列

      (1)本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件名為:j.exe.(2)進(jìn)入演示程序后即顯示文本方式的用戶界面,輸入元素1,2,3,4,5創(chuàng)建隊(duì)列。

      (3)根據(jù)提示,選擇操作2執(zhí)行元素入隊(duì)操作?;剀嚕斎肴腙?duì)元素0,回車,將0插入到隊(duì)列中。

      (4)選擇操作3執(zhí)行元素出隊(duì)操作,回車,隊(duì)首元素1出隊(duì)。

      (5)選擇操作1執(zhí)行輸出隊(duì)列長度操作,回車,輸出隊(duì)列長度為5.(6)選擇操作5執(zhí)行清空隊(duì)列操作,回車,清空。

      (7)選擇操作6執(zhí)行輸出隊(duì)頭元素操作,回車,輸出元素2。

      2.順序隊(duì)列

      (1)創(chuàng)建隊(duì)列,輸入數(shù)據(jù)

      1,2,3,4,5.(2)選擇操作1,執(zhí)行入隊(duì)操作.輸入入隊(duì)元素0

      (3)選擇操作2,執(zhí)行出隊(duì)操作。

      隊(duì)首元素1出隊(duì).(4)選擇操作3,判斷對是否為空

      (5)選擇操作4,輸出對頭元素2.(6)選擇操作5,顯示隊(duì)列元素

      3、循環(huán)隊(duì)列

      (1)創(chuàng)建隊(duì)列,輸入數(shù)據(jù) 1,2,3,4,5.(2)選擇操作1,執(zhí)行入隊(duì)操作.輸入入隊(duì)元素0

      (3)選擇操作2,執(zhí)行出隊(duì)操作。隊(duì)首元素1出隊(duì).(3)選擇操作3,判斷對是否為空

      (5)選擇操作4,輸出對頭元素2.(6)選擇操作5,顯示隊(duì)列元素為,2,3,4,5,0

      六.測試結(jié)果(xxx)1.順序隊(duì)列的實(shí)現(xiàn)和運(yùn)算

      1)輸入1即可進(jìn)行進(jìn)入到順序隊(duì)列

      2)順序隊(duì)列的建立,輸入元素的個數(shù)為5,輸入的數(shù)據(jù)分別為1,2,3,4,5,對頭為1,隊(duì)尾為5,此時隊(duì)列的數(shù)據(jù)為1 2 3

      3)輸入2即可進(jìn)行入隊(duì)運(yùn)算,輸入的入隊(duì)元素為0,此時的隊(duì)列的數(shù)據(jù)為1 2 3 4 5 0

      4)輸入3即可進(jìn)行判斷隊(duì)列的是否為空,如下圖:

      5)輸入4即可進(jìn)行去的對頭元素的算法,如下圖所示:

      6)此時的隊(duì)列的數(shù)

      據(jù)

      0,如

      7)輸入0即可退出順序隊(duì)列,如下圖:

      8)輸入3即可進(jìn)行順序隊(duì)列的算法,如下圖所示:

      9)輸入1即可進(jìn)

      應(yīng)的入

      隊(duì)

      運(yùn)

      算,如

      10)輸入2即可進(jìn)行隊(duì)列的出隊(duì)運(yùn)算,如下圖所示:

      :11)輸入3

      即可判斷順序隊(duì)列是否為空的算法,如下圖所示:

      12)輸入4即可進(jìn)行去的頭結(jié)點(diǎn)的運(yùn)算,如下圖所示:

      13)輸入5即可進(jìn)行隊(duì)列的輸出顯示的運(yùn)算,如

      14)輸入0即可進(jìn)行退出順序隊(duì)列的算法,如下圖所示:

      下圖所示:2.鏈?zhǔn)疥?duì)列的實(shí)現(xiàn)和運(yùn)算

      1)隊(duì)列的建立以及隊(duì)列的個數(shù)輸入為5,輸入的數(shù)據(jù)分別為1,2,3,4,5.如下圖:

      2)輸入2即可進(jìn)入到元素的入隊(duì)運(yùn)算,輸入入隊(duì)的元素的為0,輸入3即可進(jìn)行相應(yīng)的元素的出隊(duì)運(yùn)算,出隊(duì)元素為1.如下圖:

      3)則此時的隊(duì)列的長度為5,輸入4即可進(jìn)行隊(duì)列的銷毀以及輸入5即可進(jìn)行隊(duì)列的清空運(yùn)算,如下圖:

      4)輸入6即可進(jìn)行輸出隊(duì)列的對頭元素,輸入0即可進(jìn)行退出鏈隊(duì)列的運(yùn)算

      3.循環(huán)隊(duì)列的實(shí)現(xiàn)和運(yùn)算

      1)輸入3即可進(jìn)行循環(huán)隊(duì)列的操作,輸入5個數(shù)據(jù),它們分別為1 2 3 4 5,輸入1,即可進(jìn)行入隊(duì)操作,輸入入隊(duì)的元素為0,則此時的數(shù)據(jù)為1 2 3 4 5 0,如下圖所示:

      2)輸入2即可進(jìn)行出隊(duì)運(yùn)算,如下圖所示:

      3)輸入3即可進(jìn)行判斷隊(duì)列的是否為空,如下圖所示:

      4)輸入4即可進(jìn)行取得對頭元素,如

      5)輸入5即可進(jìn)行輸出所有的數(shù)據(jù)顯示,如下圖所示:

      所示圖:

      七.心得體會(xx)

      隊(duì)列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作,和棧一樣,隊(duì)列是一種操作受限制的線性表。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。隊(duì)列中沒有元素時,稱為空隊(duì)列。

      在隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)中,最先插入的元素將是最先被刪除的元素;反之最后插入的元素將是最后被刪除的元素,因此隊(duì)列又稱為“先進(jìn)先出” 的線性表。注意的是為了避免順序隊(duì)列造成的“假溢出”現(xiàn)象,我們通常采用順序循環(huán)隊(duì)列實(shí)現(xiàn)隊(duì)列的順序存儲。還有要注意的是在C語言中不能用動態(tài)分配的一維數(shù)組來實(shí)現(xiàn)循環(huán)隊(duì)列,如果用戶的應(yīng)用程序中設(shè)有循環(huán)隊(duì)列,則必須為它設(shè)定一個最大隊(duì)列長度;若用戶無法估計所用隊(duì)列的最大長度,則宜采用鏈?zhǔn)疥?duì)列。

      第五篇:PHP 程序員學(xué)數(shù)據(jù)結(jié)構(gòu)與算法之《?!?/a>

      PHP 程序員學(xué)數(shù)據(jù)結(jié)構(gòu)與算法之《?!?/p>

      介紹

      “要成高手,必練此功”。

      要成為優(yōu)秀的程序員,數(shù)據(jù)結(jié)構(gòu)和算法是必修的內(nèi)容。而現(xiàn)在的Web程序員使用傳統(tǒng)算法和數(shù)據(jù)結(jié)構(gòu)都比較少,因?yàn)楹芏嗨惴ǘ际前b好的,不用我們?nèi)ゲ傩木唧w的實(shí)現(xiàn)細(xì)節(jié),如PHP的取棧操作array_pop,進(jìn)棧操作array_push,都有指定的庫函數(shù),導(dǎo)致我們對基礎(chǔ)算法的研究越來越少,最后成為一個工具的傀儡而已。

      所以我還是建議更多的coder從基礎(chǔ)開始學(xué)習(xí)。這篇就先講我們最熟悉的棧操作開始入手,讓我們熟悉棧。

      棧為何物?

      口訣“后進(jìn)先出”,這是我印象最深的一句話,也是老師一坨講解中,印象最深刻的。

      定義:棧是限制插入和刪除都只能發(fā)生在一個位置上進(jìn)行的線性表,該位置是線性表的末端,叫做棧的頂。

      過程:先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù)(最后一個數(shù)據(jù)被第一個讀出來)。

      分析

      通過定義和過程,我們分析出數(shù)據(jù)結(jié)構(gòu)(紅色標(biāo)識),動作部分(藍(lán)色標(biāo)識),以及動作的規(guī)則(黃色標(biāo)識)。

      請看

      lv包包、古奇女包、coach包:004km.cn|兔毛皮草、獺兔皮草、皮草服飾:004km.cn

      組成成分

      數(shù)據(jù):線性表(用array結(jié)構(gòu)保存命名為data),末端索引(用int結(jié)構(gòu)保存命名為end,初始值為null——因?yàn)殚_始線性表是沒有元素的,所以就沒有末端索引這么一說,而且由于不斷取數(shù)據(jù),添加數(shù)據(jù),這個末端是變化的元素。)。

      動作(方法):壓入(push:規(guī)則,放在線性表最后面),彈出(pop:規(guī)則,從最后取出,并且末端位置向前移動)。

      編碼

      lv包包、古奇女包、coach包:004km.cn|兔毛皮草、獺兔皮草、皮草服飾:004km.cn

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

      lv包包、古奇女包、coach包:004km.cn|兔毛皮草、獺兔皮草、皮草服飾:004km.cn

      總結(jié)

      以上是本人對棧的分析理解過程,由于我是一名php coder,所以我用php的角度去分析和編碼。

      如果是C語言去編碼,數(shù)組應(yīng)該指定最大寬度,因?yàn)镃語言數(shù)組不像php數(shù)組能自行增長,必須要有一個初始寬度。

      lv包包、古奇女包、coach包:004km.cn|兔毛皮草、獺兔皮草、皮草服飾:004km.cn

      下載數(shù)據(jù)結(jié)構(gòu)棧與隊(duì)列報告word格式文檔
      下載數(shù)據(jù)結(jié)構(gòu)棧與隊(duì)列報告.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(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)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        實(shí)驗(yàn)報告——棧和隊(duì)列的應(yīng)用

        實(shí)驗(yàn)5 棧和隊(duì)列的應(yīng)用 目的和要求: (1)熟練棧和隊(duì)列的基本操作; (2)能夠利用棧與隊(duì)列進(jìn)行簡單的應(yīng)用。 一、題目 題目1.利用順序棧和隊(duì)列,實(shí)現(xiàn)一個棧和一個隊(duì)列,并利用其判斷一個字......

        實(shí)驗(yàn)總結(jié)報告-棧和隊(duì)列(大全5篇)

        實(shí)驗(yàn)總結(jié)報告—棧和隊(duì)列 學(xué)號:姓名: 時間: 一、目的 1.做實(shí)驗(yàn)的目的 加深對線性結(jié)構(gòu)棧和隊(duì)列的理解,學(xué)會定義棧和隊(duì)列的存儲結(jié)構(gòu),加強(qiáng)對棧和隊(duì)列操作機(jī)制的理解,掌握棧和隊(duì)列的基......

        實(shí)驗(yàn)三 棧和隊(duì)列的應(yīng)用

        一、 實(shí)驗(yàn)?zāi)康?1 掌握棧的數(shù)據(jù)類型描述及棧的特點(diǎn); 2 掌握棧的順序存儲結(jié)構(gòu)的特點(diǎn)及算法描述; 3 掌握隊(duì)列的數(shù)據(jù)類型描述及鏈?zhǔn)酱鎯Y(jié)構(gòu)的特點(diǎn)和算法描述。 二、實(shí)驗(yàn)內(nèi)容 停車......

        棧隊(duì)列實(shí)驗(yàn)指導(dǎo)書(共5篇)

        數(shù)理學(xué)院實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn)三 棧與隊(duì)列的實(shí)現(xiàn),棧的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1、掌握棧和隊(duì)列的特點(diǎn),即先進(jìn)后出與先進(jìn)先出的原則。 2、掌握棧和隊(duì)列的順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)及其......

        使用隊(duì)列棧結(jié)構(gòu)反序輸出字符串

        隊(duì)列結(jié)構(gòu) 實(shí)驗(yàn)?zāi)康?1.熟練掌握棧和隊(duì)列的特點(diǎn)。 2.掌握棧的定義和基本操作,熟練掌握順序棧的操作及應(yīng)用。 3.掌握對列的定義和基本操作,熟練掌握鏈?zhǔn)疥?duì)列的操作及應(yīng)用, 掌握環(huán)形......

        數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告

        數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 散列表的應(yīng)用:插隊(duì)買票 專業(yè) 計算機(jī)科學(xué)與技術(shù)(網(wǎng)絡(luò)技術(shù)) 金玲 計算機(jī)131 1310704114 張靜林 2015年1月23日 學(xué)生姓名 班學(xué)級 號 指導(dǎo)教師 完成日期 目錄1......

        數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告

        正文要求:對每一個題目,正文必須包括以下幾個方面 知識點(diǎn)回顧: 實(shí)驗(yàn)要求: 實(shí)驗(yàn)過程:包括設(shè)計思路,算法描述,程序清單,調(diào)試等等; 實(shí)驗(yàn)小結(jié): 注意:(1)正文中字體用小四號宋體,行間距1.25倍......

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

        數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的實(shí)習(xí)報告怎么寫呀,請求做過課設(shè)的同學(xué)發(fā)一篇范文過來謝謝-_-規(guī)范實(shí)習(xí)報告的開頭應(yīng)給出題目、班級、姓名、學(xué)號和完成日期,并包括以下七個內(nèi)容:1、需求分析以......