資料結構(C實現)------- 順序隊列(迴圈隊列之少用一個儲存空間實現) .

來源:互聯網
上載者:User

標籤:迴圈順序隊列的另一種實現方式

      上節已經提到有三種方法來實現迴圈順序隊列,其中第一種設立標識不常用,最常的就是後兩種,上一節已經討論了用計數器來實現迴圈順序隊列,這節就用第三種方法,也就是少用一個儲存空間來實現迴圈順序隊列,其基本操作和用計數實作類別同,下面是具體實現:

順序隊列(迴圈隊列)類型描述:
//順序隊列的類型描述#define MAXSIZE 5typedef int ElemType;typedef struct{ElemType *data;int front,rear;}SqQueue;

 

基本操作:

         1. 初始化順序隊列(迴圈隊列) Init_SqQueue(SqQueue* Q)

void Init_SqQueue(SqQueue* Q){    Q->data = (SqQueue*)malloc(sizeof(SqQueue) * MAXSIZE);Q->front = Q->rear = 0;}

 

        2. 銷毀順序隊列(迴圈隊列)Destroy_SqQueue(SqQueue* Q)

void Destroy_SqQueue(SqQueue* Q){if(Q->data){free(Q->data);Q->front = Q->rear = 0;}} 

 

       3. 清空順序隊列(迴圈隊列)Clear_SqQueue(SqQueue* Q)

void Clear_SqQueue(SqQueue* Q){Q->front = Q->rear = 0;}

 

      4. 判斷順序隊列(迴圈隊列)是否為空白IsEmpty_SqQueue(SqQueue* Q)

int IsEmpty_SqQueue(SqQueue* Q){return (Q->rear == Q->front);}

 

       5. 判斷順序隊列(迴圈隊列)是否已滿 iSFull_SqQueue(SqQueue* Q)

int iSFull_SqQueue(SqQueue* Q){return ((Q->rear + 1) % MAXSIZE == Q->front);}


      6. 求得順序隊列(迴圈隊列)的長度GetLength_SqQueue(SqQueue* Q)

int GetLength_SqQueue(SqQueue* Q){return (Q->rear - Q->front + MAXSIZE) % MAXSIZE;}

 

      7. 取得順序隊列(迴圈隊列)的的隊頭GetHead_SqQueue(SqQueue* Q,ElemType *x)

void GetHead_SqQueue(SqQueue* Q,ElemType *x){if(IsEmpty_SqQueue(Q)){printf("順序隊列空!\n");exit(0);}else{*x = Q->data[Q->front];}}

 

       8. 取得順序隊列(迴圈隊列)的的隊尾GetRear_SqQueue(SqQueue* Q,ElemType *x

void GetRear_SqQueue(SqQueue* Q,ElemType *x){if(IsEmpty_SqQueue(Q)){printf("順序隊列空!\n");exit(0);}else{*x = Q->data[(Q->rear - 1 + MAXSIZE) % MAXSIZE];}}

 

      9. 入順序隊列(迴圈隊列)En_SqQueue(SqQueue* Q,ElemType x)

void En_SqQueue(SqQueue* Q,ElemType x){if(iSFull_SqQueue(Q)){printf("順序隊列已滿!\n");exit(0);}else{Q->data[Q->rear] = x;Q->rear = (Q->rear + 1) % MAXSIZE;}}

 

      10. 出順序隊列(迴圈隊列)De_SqQueue(SqQueue* Q,ElemType *x)

void De_SqQueue(SqQueue* Q,ElemType *x){if(IsEmpty_SqQueue(Q)){printf("順序隊列空!\n");exit(0);}else{*x = Q->data[Q->front];Q->front = (Q->front + 1) % MAXSIZE;}}


       11. 列印順序隊列(迴圈隊列)Print_SqQueue(SqQueue* Q)

void Print_SqQueue(SqQueue* Q){int i = 0;int j = Q->front;if(IsEmpty_SqQueue(Q)){printf("順序隊列空!\n");exit(0);}else{while(i < GetLength_SqQueue(Q)){printf("%d\t",Q->data[j]);j = (j + 1) % MAXSIZE;i++;}printf("\n");}}


     以上,就是迴圈順序隊列的另一種實現方法,也就是通過少用一個儲存空間,和用計數器實現迴圈順序隊列的主要區別在判斷隊列滿上。


 




 

       

 



 

 

 

 

 

資料結構(C實現)------- 順序隊列(迴圈隊列之少用一個儲存空間實現) .

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.