《實用數據結構》 第4章 6.1題
ios
//算法設計題.要求:設一個循環隊列Queue,只有頭指針front,不設尾指針,另設一個含有元素個數的記錄器count, //試寫出相應的入隊和出隊的算法 #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; #define MAXLEN 10 #define Status int #define datatype int #define OK 1 #define Y 1 #define N 0 typedef struct{ datatype s[MAXLEN]; int front; int count; }SeqQueue; //初始化 Status InitSeqQueue(SeqQueue &sq) { sq.front=-1; //隊首指針指向第一個元素的前一個位置 sq.count=0; //count置爲0 return OK; } //隊滿 Status IsFull(SeqQueue &sq) { if(sq.count==MAXLEN) return Y; //若隊滿,返回1 else return N; //不然返回0 } //隊空 Status IsEmpty(SeqQueue &sq) { if(sq.count==0) return Y; //若隊空,返回0 else return N; } //入隊 Status InQueue(SeqQueue &sq,datatype x) { if(IsFull(sq)) return 0; //隊滿 srand(time(NULL)); int a=rand()%10; sq.s[sq.count]=x; sq.count++; return OK; } //出隊 Status OutQueue(SeqQueue &sq,datatype &x) { if(IsEmpty(sq)) return 0; //隊空 sq.front++; x=sq.s[sq.front]; sq.count--; //隊列元素減小1個 return 1; } //顯示隊列元素 Status ShowQueue(SeqQueue sq) { if(IsEmpty(sq)) return 0; //若隊空,返回0 while(sq.count!=0) { cout<<sq.s[sq.front+1]<<" "; sq.front++; sq.count--; } cout<<endl; } //讀取隊首元素 Status ReadQueue(SeqQueue sq,datatype &x) { if(IsEmpty(sq)) return 0; //若隊空,返回0 x=sq.s[sq.front+1]; return 1; } int main() { SeqQueue SQ; InitSeqQueue(SQ); cout<<"入棧"<<endl; InQueue(SQ,1); InQueue(SQ,2); InQueue(SQ,3); InQueue(SQ,4); InQueue(SQ,5); cout<<"顯示隊列元素:"<<endl; ShowQueue(SQ); cout<<"出隊:"<<endl; datatype temp; OutQueue(SQ,temp); cout<<"顯示隊列元素:"<<endl; ShowQueue(SQ); cout<<"顯示隊首元素:"<<endl; ReadQueue(SQ,temp); cout<<temp<<endl; return OK; } [dell@localhost queue]$ ./app 入棧 顯示隊列元素: 1 2 3 4 5 出隊: 顯示隊列元素: 2 3 4 5 顯示隊首元素: 2 [dell@localhost queue]$