程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 若何完成輪回隊列

若何完成輪回隊列

編輯:關於C++

若何完成輪回隊列。本站提示廣大學習愛好者:(若何完成輪回隊列)文章只能為提供參考,不一定能成為您想要的結果。以下是若何完成輪回隊列正文


生涯中有許多隊列的影子,好比打飯列隊,買火車票列隊成績等,可以說與時光相干的成績,普通都邑觸及到隊列成績;從生涯中,可以籠統出隊列的概念,隊列就是一個可以或許完成“先輩先出”的存儲構造。隊列分為鏈式隊列和靜態隊列;靜態隊列普通用數組來完成,但此時的隊列必需是輪回隊列,不然會形成偉大的內存糟蹋;鏈式隊列是用鏈表來完成隊列的。

#ifndef SQQUEUE_H_INCLUDED 
#define SQQUEUE_H_INCLUDED /* 避免反復包括 */ 
 
////////////////////////////////////////// 
//包括頭文件 
#include <stdlib.h> 
#include "ds.h" // OK, Status 等界說 
 
//數據元素的類型(缺省應用int型) 
#ifndef ElemType 
#define ElemType int 
#define USE_DEFAULT_ELEMTYPE /* 應用缺省類型的標記 */ 
#endif //ElemType 
 
////////////////////////////////////////// 
//輪回隊列的存儲構造 
 
#define MAXQSIZE 500/* 輪回隊列的最年夜容量 */ 
typedef struct { 
  /* TODO (#1#): 這裡完成輪回隊列的類型界說 */ 
  ElemType *base; 
  int front; 
  int rear; 
  //.................................... 
} SqQueue; 
 
 
////////////////////////////////////////// 
//輪回隊列的根本操作 
 
//結構一個空隊列Q 
Status InitQueue(SqQueue &Q) 
{ 
  /* TODO (#2#): 結構空隊列 */ 
  Q.base=(ElemType*)malloc(MAXQSIZE *sizeof(ElemType)); 
  if(!Q.base)exit(OVERFLOW); 
  QQ.front=Q.rear =0; 
  return OK; //TODO: 調換這行代碼,以下同 
  //.................................... 
} 
 
//燒毀隊列Q 
// 條件:隊列Q已存在 
Status DestroyQueue(SqQueue &Q) 
{ 
  /* TODO (#3#): 燒毀隊列 */ 
  free(Q.base); 
  Q.base=NULL; 
  Q.front=0; 
  Q.rear=0; 
  return OK; 
  //.................................... 
} 
 
//將隊列Q清為空隊列 
// 條件:隊列Q已存在 
Status ClearQueue(SqQueue &Q) 
{ 
  /* TODO (#4#): 清空隊列 */ 
  Q.base=0; 
  Q.rear=0; 
  return OK; 
  //.................................... 
} 
 
//若隊列Q為空,則前往TRUE,不然FALSE 
// 條件:隊列Q已存在 
Status QueueEmpty(SqQueue Q) 
{ 
  /* TODO (#5#): 斷定隊列能否為空 */ 
  if(Q.front==Q.rear) 
    return OK; 
  else 
    return ERROR; 
  //.................................... 
} 
 
//前往隊列Q的元素個數,即隊列長度 
// 條件:隊列Q已存在 
int QueueLength(SqQueue Q) 
{ 
  /* TODO (#6#): 前往隊列長度 */ 
  return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; 
  //.................................... 
} 
 
//取隊列Q頭元素用e前往 
// 條件:隊列Q存在且非空 
Status GetHead(SqQueue Q,ElemType &e) 
{ 
  /* TODO (#7#): 取隊頭元素存入e */ 
  if(Q.rear==Q.front) 
    return ERROR; 
  e=Q.base[Q.front]; 
  //e=*(Q.base+Q.front); 
  return OK;//前往操作狀況(勝利:OK,掉敗:ERROR) 
  //.................................... 
} 
 
//拔出元素e作為隊列Q的新的隊尾元素 
// 條件:隊列Q存在且未滿 
Status EnQueue(SqQueue &Q, ElemType e) 
{ 
  /* TODO (#8#): 元素e入隊列 */ 
  if((Q.rear+1)%MAXQSIZE==Q.front) 
    return ERROR; 
  //e=*(Q.base +Q.rear); 
  Q.base[Q.rear]=e; 
  Q.rear=(Q.rear+1)%MAXQSIZE; 
  return OK;//前往操作狀況(勝利:OK,掉敗:ERROR) 
  //.................................... 
} 
 
//刪除隊列Q的隊頭元素,並用e前往 
// 條件:隊列Q存在且非空 
Status DeQueue(SqQueue &Q, ElemType e) 
{ 
  /* TODO (#9#): 出隊列存入e */ 
  if(Q.front==Q.rear) 
    return ERROR; 
  //e=*(Q.base+Q.front); 
  e=Q.base[Q.front]; 
  Q.front=(Q.front+1)%MAXQSIZE; 
  return OK;//前往操作狀況(勝利:OK,掉敗:ERROR) 
  //.................................... 
} 
 
////////////////////////////////////////// 
 
 
//TODO: 界說好 SqQueue 類型後應用 QueueView 函數 
/****** //TODO: 刪除此行以便應用QueueView() 
#include <stdio.h> 
//檢查隊列狀況(調試用) 
void QueueView(SqQueue Q) 
{ 
  extern void PrintElem(ElemType e);//打印數據用 
  int i=0; 
  if(Q.front<0||Q.front>=MAXQSIZE||Q.rear<0||Q.rear>=MAXQSIZE){ 
    printf("隊列未初始化\n"); 
    return ; 
  } 
  printf("---Queue View---\n"); 
  printf("front=%d , rear=%d\n", Q.front, Q.rear); 
  if(Q.rear>=Q.front) { 
    printf(".....  ......\n"); 
    for(i=Q.front; i<Q.rear; i++) { 
      printf("%5d\t", i); 
      PrintElem(Q.base[i]); 
      printf("\n"); 
    } 
    if(i<MAXQSIZE) printf(".....  ......\n"); 
  } else {    
    for(i=0; i<Q.rear; i++) { 
      printf("%5d\t", i); 
      PrintElem(Q.base[i]); 
      printf("\n"); 
    } 
    printf(".....  ......\n"); 
    for(i=Q.front; i<MAXQSIZE; i++) { 
      printf("%5d\t", i); 
      PrintElem(Q.base[i]); 
      printf("\n"); 
    } 
  } 
  printf("--- view end ---\n"); 
} 
******/ //TODO: 刪除此行以便應用QueueView() 
 
//撤消ElemType的默許界說,以避免影響其它部門 
#ifdef USE_DEFAULT_ELEMTYPE 
#undef ElemType 
#undef USE_EFAULT_ELEMTYPE 
#endif 
 
#endif //SQQUEUE_H_INCLUDED 

#include <stdio.h> 
#include <stdlib.h> 
#include "sqqueue.h" 
 
//初始化體系 
 
 
void Finalize(SqQueue &q);  
 
//////////////////////////////////////////// 
//主法式 
int main() 
{ 
  SqQueue q; //輪回隊列 
  int x; 
   
  //體系初始化 
  InitQueue(q); 
  printf("數據元素進隊列,以0停止"); 
  scanf("%d",&x); 
  while(x!=0){ 
   EnQueue(q,x); 
   scanf("%d",&x); 
  } 
  printf("\n隊列元素的個數"); 
 
  printf("%d",QueueLength(q)); 
 
 
  printf("\n頭元素是:"); 
  if(!QueueEmpty(q)){ 
   if(GetHead(q,x)==OK) 
   printf("%d",x); 
  } 
 
 
  printf("\n出隊列,先輩先出"); 
   if( DeQueue(q,x)==OK) 
     printf("%d",x); 
  printf("\n此時的仇人是:"); 
  if(!QueueEmpty(q)){ 
   if(GetHead(q,x)==OK) 
   printf("%d\n",x); 
  } 
 
} 

完成的後果:

以上所述就是本文的全體內容了,願望年夜家可以或許懂得。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved