链队列

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);
    

以上是关于链队列的主要内容,如果未能解决你的问题,请参考以下文章

Java实现队列(循环队列,链队列)

9.顺序队列循环队列链队列

数据结构——队列 (链队列和基于Java的运算实现)

队列(链式队列)

链栈或者链队列为啥需要做两个结构体?

线性表 链队列