#include<bits/stdc++.h>
#include<conio.h>
#define TRUE 1
#define FALSE 0
#define QelemType int
typedef struct Node
{
QelemType data;
struct Node *next;
} Node,*LinkQNode;
typedef struct
{
LinkQNode rear;
} LinkQueue;
void InitLinkQueue(LinkQueue &Q)
{
Q.rear=(LinkQNode)malloc(sizeof(Node));
Q.rear->next=Q.rear;
}
int IsLQEmpty(LinkQueue &Q)
{
if(Q.rear->next==Q.rear)
return TRUE;
else
return FALSE;
}
int EnLinkQueue(LinkQueue &Q,QelemType x)
{
LinkQNode NewNode;
NewNode=(LinkQNode)malloc(sizeof(LinkQNode));
if(NewNode!=NULL)
{
NewNode->data=x;
NewNode->next=Q.rear->next;
Q.rear->next=NewNode;
Q.rear=NewNode;
return TRUE;
}
else
return FALSE;
}
int DeLinkQueue(LinkQueue &Q,QelemType *x)
{
LinkQNode p;
if(Q.rear->next==Q.rear)
return FALSE;
p=Q.rear->next->next;
Q.rear->next->next=p->next;
if(Q.rear==p)
Q.rear=Q.rear->next;
*x=p->data;
free(p);
return TRUE;
}
int main()
{
int t;
char a;
QelemType tt;
LinkQueue Q;
InitLinkQueue(Q);
if(IsLQEmpty(Q))
printf("该队列目前为空!\n");
else
printf("该队列不为空!\n");
printf("输入入队列的元素个数:");
scanf("%d",&t);
for(int i=1; i<=t; i++)
{
QelemType ys;
printf("\n输入第%d个入列元素:",i);
scanf("%d",&ys);
if(EnLinkQueue(Q,ys))
printf("元素%d成功入列!\n",ys);
}
printf("\n输入字母‘e’开始出列\n");
getchar();
while(~scanf("%c",&a))
{
getchar();
if(a!='e')
{
printf("\n输入字母'e'继续出列\n");
continue;
}
if(DeLinkQueue(Q,&tt))
printf("元素%d成功出列\n",tt);
if(IsLQEmpty(Q))
{printf("该队列目前为空!\n");break;}
else
printf("该队列不为空!\n");
printf("\n输入字母'e'继续出列\n");
}
return 0;
}
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点(不设队头指针),试编写相应的置空队列、入队列、出队列的算法。
最新推荐文章于 2022-09-27 17:12:31 发布