⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qnode.h

📁 这是我学习数据结构与算法时编的关于队列操作的程序
💻 H
字号:
#include"stdio.h"
#include"malloc.h"
#include"string.h"
#include"define.h"

typedef int QElemType;

typedef struct QNode/*声明链队列中的结点*/
{
	QElemType data;	/*定义数据元素*/
	QNode *next;	/*定义后继指针*/
}QNode;

typedef struct		/*声明链队列的结构*/
{
	QNode *front;	/*定义队头指针*/
	QNode *rear;	/*定义队尾指针*/	
}LinkQueue;

Status InitQueue(LinkQueue &Q)	
/*构造空队列*/
{
	Q.front=Q.rear=(QNode *)malloc(sizeof(QNode));/*为空栈队列分配头结点*/
	if(Q.front==0)return OVERFLOW;/*分配失败*/
	Q.front->data=0;	/*头结点的数据域用来记录队列长度*/
	Q.front->next=NULL;	/*头结点的指针域置零*/
	return OK;
}

Status DestroyQueue(LinkQueue &Q)
/*销毁队列*/
{
	QNode *q;
	q=Q.front;	/*q指向头结点*/
	while(q!=NULL)	/*判断q不为零*/
	{
		Q.front=q->next;	
		free(q);
		q=Q.front;
	}
	Q.front=NULL;
	Q.rear=NULL;
	return OK;
}

Status EnQueue(LinkQueue &Q,QElemType e)
/*在队尾插入数据元素e*/
{
	QNode *p;
	p=(QNode*)malloc(sizeof(QNode));/*为插入的数据元素开辟结点空间*/
	if(p==0)return OVERFLOW;
	p->data=e;		/*新结点空间的数据域赋插入值*/
	p->next=NULL;	/*新结点空间的指针域置零*/
	Q.rear->next=p;	/*新结点增加到队尾*/
	Q.rear=p;		/*对尾指针指向新结点*/
	(Q.front->data)++;	/*队列长度加1*/
	return OK;
}

Status DeQueue(LinkQueue &Q,QElemType &e)
/*删除队头结点,用e返回结点的数据元素*/
{
	QNode *p;
	if(Q.front==Q.rear)return ERROR;	
	if(Q.front->next==Q.rear)Q.rear=Q.front;
	/*如果只剩下最后一个结点(除了头结点),则让尾结点重新指向头结点*/
	p=Q.front->next;	/*p指向第一个(紧跟头结点)结点*/	
	Q.front->next=p->next;	/*头结点指向第二个结点,使之成为第一结点*/
	e=p->data;	/*e返回结点的数据元素*/
	free(p);	/*释放结点*/
	(Q.front->data)--;	/*链队列长度减1*/
	return OK;	
}

void print_Queue(LinkQueue Q)
/*从队头开始依次输出数据元素*/
{
	QNode *p;
	p=Q.front->next;
	printf("Length of Queue is %d\nElement of Queue is :",Q.front->data);
	while(p!=NULL)
	{
		printf("%d,",p->data);
		p=p->next;
	}
	N;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -