欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构之链队列

程序员文章站 2022-05-04 15:57:06
...
#include<stdio.h>
#include<stdlib.h> 
//链表中的头结点结构
typedef struct QNode{
	int data;//数据域 
	struct QNode *next;//引用域 
}QNode;
//创建链式队列的函数
//初始化函数
QNode *initQueue(){
	//创建一个头结点
	QNode *queue=(QNode*)malloc(sizeof(QNode));
	//对头结点进行初始化
	queue->next=NULL;
	//返回头结点的地址 
	return queue;
} 
//入队函数
QNode *enQueue(QNode *rear,int data) {
	//为新结点创建一片内存空间
	QNode *elem=(QNode*)malloc(sizeof(QNode));
	//将插入的元素赋值给新结点的数据域 
	elem->data=data;
	//新结点指针域指向NULL; 
	elem->next=NULL;
	//建立队尾结点与新结点的逻辑关系 
	rear->next=elem;
	//队尾指向新结点(队尾始终指向入队元素) 
	rear=elem;
	printf("入队元素为:%d\n",rear->data);
		//返回队尾地址 
	return rear; 
}
//出队操作
	void deQueue(QNode *top,QNode *rear){
		//判断队列是否为空 
		if(top->next==NULL){
			printf("队列为空!!!\n");
			return;
		}
		//创建指针p指向队头的下一个结点 
		QNode *p=top->next;
		printf("出队元素为:%d\n",p->data);
		//队头移向下一个结点 
		top->next=p->next;
		//判断是否还剩下两个元素,如果是的话就将队尾指向队头结点 
		if(rear==p){
			rear=top;
		} 
		//释放p结点空间 
		free(p); 
	} 
	main(){
		//创建队尾,队头指针 
		QNode *rear,*top,*queue;
		 queue=rear=top=initQueue();//创建头结点
		//入队
		rear=enQueue(rear,8);
		rear=enQueue(rear,88);
		rear=enQueue(rear,888);
		//出队
		deQueue(top,rear); 
		deQueue(top,rear);
		//入队
		rear=enQueue(rear,999);
		//出队
		deQueue(top,rear); 
	}

数据结构之链队列

相关标签: 数据结构