/*无队头指针的循环链队*/
#include<stdio.h>
typedef struct linkqueueNode
{
int data;
struct linkqueueNode *next;
}LkQueNode;
typedef struct linkque
{
LkQueNode *rear;
}LkQue;
/*初始化*/
void InitQueue(LkQue *LQ)
{
LkQueNode *p;
p=malloc(sizeof(LkQueNode));
LQ->rear=p;
p->next=LQ->rear; /*将队列设置成循环链表,且置队列为空。*/
}
/*入队列*/
void EnQueue(LkQue *LQ,int x)
{
LkQueNode *p;
p=malloc(sizeof(LkQueNode));/*生成新结点*/
p->data=x;
p->next=LQ->rear->next;
LQ->rear->next=p; /*新结点链入队列尾*/
LQ->rear=p; /*移动尾指针*/
}
/*出队列*/
void Outqueue(LkQue *LQ,int *x)
{
LkQueNode *p,*h;
if(LQ->rear==LQ->rear->next)
printf("队列空!\n");
else
{
h=LQ->rear->next;/*找到链表头结点*/
p=h->next; /*找到队列第一元素*/
*x=p->data;
h->next=p->next;
if(p==LQ->rear) /*若队列只有一个结点,移动队列尾指针。*/
LQ->rear=h;
free(p);
}
}
main()
{
LkQue LQ;
InitQueue(&LQ);
int i,n=0,x;
printf("----创建队列----\n");
printf("输入队列元素:\n");
scanf("%d",&x);
while(x!=0)
{
printf("输入队列元素:\n");
EnQueue(&LQ,x);
n++;
scanf("%d",&x);
}
printf("----输出队列----\n");
for(i=1;i<=n;i++)
{
Outqueue(&LQ,&x);
printf("%d\t",x);
}
}
无队头指针的循环链队
最新推荐文章于 2021-11-29 23:31:11 发布