数据结构学习笔记--链队列

时间:2023-02-25 18:17:27
 
以下是源码

//链队列
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
typedef struct QNode
{
	int data;
	struct QNode *next;
 } LNode, *LinkList;

 typedef struct
 {
 	LinkList front;
 	LinkList rear;
 }LinkQueue;
 
 
 int InitQueue(LinkQueue &Q)
 {
 	Q.front=Q.rear=(LinkList)malloc(sizeof(LNode));
 	if(!Q.front)
 	exit(-1);
 	Q.front->next=NULL;
 	return 1;
 }
 
 int QueueEmpty(LinkQueue Q)
 {
 	if(Q.front==Q.rear)
 	return 1;
 	else return 0;
 	
 }
 
 int EnQueue(LinkQueue &Q,int e)
 {
 	LinkList p=(LinkList)malloc(sizeof(LNode));
	if(!p)
	exit(-1);
	p->data=e;
	p->next=NULL;
	Q.rear->next=p;
	Q.rear=p;
	return 1;
 } 
 
 int DeQueue(LinkQueue &Q,int &e)
 {
 	if(Q.front==Q.rear)
 	return 0;
 	LinkList p=Q.front->next;
 	e=p->data;
 	Q.front->next=p->next;
 	if(Q.rear==p)
 	Q.rear=Q.front;
 	free(p);
 	return 1;
 }
 
 int main()
 {
 	LinkQueue Q;
 	int result = InitQueue(Q);
 	if(result==1)
 	printf("创建空链列表成功!\n");
 	if(QueueEmpty(Q)==1)
 	printf("Q是一个空的链队列!\n");
 	else
 	printf("Q是一个非空的链队列!\n");
 	printf("把10放进队列:\n");
 	EnQueue(Q,10);
 	if(QueueEmpty(Q)==1)
 	printf("Q是一个空的链队列!\n");
 	else
 	printf("Q是一个非空的链队列!\n");
 	
 	printf("把一个元素出队列\n");
 	int e;
 	DeQueue(Q,e);
 	printf("出队列的元素为%d\n",e); 
 	if(QueueEmpty(Q)==1)
 	printf("Q是一个空的链队列!\n");
 	else
 	printf("Q是一个非空的链队列!\n");
 	
 }