#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#define M 10
typedef char datatype;
typedef struct
{
datatype data[M];
int rear,quelen;
}sequeue;
void SETNULLQS(sequeue *sq)
{
sq->rear=M-1;
sq->quelen=0;
}
bool EMPTYQS(sequeue *sq)
{
if(sq->quelen==0)
return true;
else return false;
}//判斷隊空函數;
int ENQUEUEQS(sequeue*sq,datatype x)
{
if(sq->quelen==M){
printf("隊滿上溢。/n");
return 0;
}
else{
sq->rear=(sq->rear+1)%M;
sq->data[sq->rear]=x;
sq->quelen++;
return 1;
}
}//入隊
datatype DEQUEUEQS(sequeue *sq)
{
datatype temp;
int front;
if(EMPTYQS(sq))
{
printf("隊空下溢。/n");
return 0;
}
else{
front=sq->rear-sq->quelen+1;
temp=sq->data[front];
sq->quelen--;
return(temp);
}
}//出隊,利用了front=rear-quelen的性質;
void MyPrintf(sequeue *sq)
{
int front;
front=sq->rear-sq->quelen+1;
if(front==sq->rear+1)
printf("隊空/n");
while(front!=sq->rear+1){
printf("%c",sq->data[front]);
front++;
}
printf("/n");
return;
}//自己編寫的打印函數;
int main()
{
datatype ch;
sequeue *sq;
sq=(sequeue*)malloc(sizeof(sequeue));
SETNULLQS(sq);//置空隊;
if(EMPTYQS(sq))
printf("隊空/n");
else
printf("隊非空/n");
printf("請輸入字符(空格結束):");
while(1){
ch=getche();
if(ch==' ')
{
// if(!(ENQUEUEQS(sq,'/0')))//如果是空格的話,就把'/0'入棧;
// break;
break;
}
if(!(ENQUEUEQS(sq,ch)))
break;
}
MyPrintf(sq);
while(1)
{
int i=0;
ch=DEQUEUEQS(sq);
if(i==sq->quelen)
break;
printf("%c/n",ch);
MyPrintf(sq);//調用自己編寫的MyPrintf,原因是普通printf無法打印出隊內的字符;
i++;
}
return 0;
}