链队列
Posted 梦西空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链队列相关的知识,希望对你有一定的参考价值。
#include<stdio.h>//队列的链式结构 (有头节点)
#include<stdlib.h>
#define kong 1
#include<math.h>
typedef int typelect;
typedef struct node
typelect data;
struct node *next;
listnode;
typedef struct
listnode *top;
listnode *rear;
listqueue;
void initqueue(listqueue *p)//初始化
listnode *p1;
p1=(listnode *)malloc(sizeof(listnode));
p->rear=p->top=p1;
p1->next=NULL;
int emptyqueue(listqueue p)//判空运算
if(p.rear==p.top)
return kong;
return 0;
int queuelen(listqueue p)//求长度 (不包含头节点)
if(emptyqueue(p))
return 0;
int i=1;
listnode *p1;
p1=p.top->next;
while(p1->next!=NULL)
p1=p1->next;
i++;
return i;
void enqueue(listqueue *p,typelect e)//入列
listnode *p1,*p2;
p1=(listnode *)malloc(sizeof(listnode));
p1->data=e;
p1->next=NULL;
p2=p->rear;
p->rear=p1;
p2->next=p1;
int dequeue(listqueue *p,typelect *e)//出列
if(emptyqueue(*p))
return -1;
*e=p->top->next->data;
listnode *p1;
p1=p->top->next->next;
if(p->rear==p->top->next)
p->rear=p->top;
free(p->top->next);
p->top->next=p1;
return 0;
int printqueue(listqueue p)//打印
listnode *p1;
p1=p.top->next;
if(p1==NULL)
printf("该链表为空\\n");
return -1;
while(p1!=NULL)
printf("%d\\n",p1->data);
p1=p1->next;
return 0;
void createqueue(listqueue *p)//创建运算
int len,i;
typelect j;
printf("请输入队列的长度:");
scanf("%d",&len);
for(i=0;i<len;i++)
scanf("%d",&j);
enqueue(p,j);
void destroyqueue(listqueue *p)//清空队列
typelect e;
typelect *x=&e;
while(!emptyqueue(*p))
dequeue(p,&e);
free(x);
int main()
listqueue *p=(listqueue *)malloc(sizeof(listqueue));
typelect e;
initqueue(p);
以上是关于链队列的主要内容,如果未能解决你的问题,请参考以下文章