题目:链式队列的基本操作
将从键盘输入的一系列字符存储到链式队列中,当输入的字符为’0’时,执行出队操作并将出队元素打印到屏幕上;当输入的字符为’@’时,队列中剩余所有元素依次出队并打印到屏幕上;当输入其他字符时,字符入队。
#include <cstdio>
#include <cstdlib>//申请空间
char c;
typedef struct node
{
char data;
struct node*next;
}Qnode,*Qlink;
typedef struct
{
Qnode *front,*rear;
}linkqueue;
void Createqueue(linkqueue *q)//创建队列
{
q->front = (Qlink)malloc(sizeof(Qnode));
q->front->next = NULL;
q->rear = q->front;
}
int Emptyqueue(linkqueue *q)//判断栈空
{
if(q->front == q->rear)
return 1;
else
return 0;
}
void Enqueue(linkqueue *q,char e)//元素e进队
{
Qlink p;
p = (Qlink)malloc(sizeof(Qnode));
p->data = e;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
char Dequeue(linkqueue *q)//出队
{
Qlink p;
if(Emptyqueue(q))
return (NULL);
else{
p = q->front;
q->front = p->next;
free(p);
return (q->front->data);
}
}
int main()
{
linkqueue q;
Createqueue(&q);
while(c=getchar(),c-'#'){
switch(c)
{
case '0':
{
if(Emptyqueue(&q)){
printf("Empty queue!\n");break;
}
printf("%c\n",Dequeue(&q));break;
}
case '@':
{
if(Emptyqueue(&q)){
printf("Empty queue!\n");break;
}
while(!Emptyqueue(&q)){
printf("%c",Dequeue(&q));
}
printf("\n");break;
}
case '\n':
{
break;
}
default:
{
Enqueue(&q,c);
}
}
}
return 0;
}