队列操作(C语言,含代码)

队列是一种先进先出的数据结构,在写队列的代码时,建议先对链表的操作有所掌握。在这里实现一种链表式的队列。

// queue2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"

typedef struct QNode
{
	int data;
	QNode *next;
}QNode;

typedef struct Liqueue
{
	QNode *front;
	QNode *rear;

}Liqueue;

void initQueue(Liqueue *queue)
{
	queue->front = queue->rear = (QNode *)malloc(sizeof(QNode));
	queue->front = queue->rear = NULL;
}

bool idEmpty(Liqueue *queue)
{
	if(queue->front == NULL || queue->rear == NULL)
	{
		return 1;
	}
	else return 0;
}

//进队列
void insertQueue(Liqueue *queue, int data)
{
	QNode *node = (QNode *)malloc(sizeof(QNode));
	node->data = data;
	node->next = NULL;
	if(queue->rear == NULL)
	{
		queue->rear = queue->front = node; //如果是第一个节点
	}
	else
	{
		queue->rear->next = node;
		queue->rear = node;
	}
}

int  popQueue(Liqueue *queue, int *data)
{
	QNode *node = queue->front;
	if(queue->front == NULL || queue->rear ==NULL) //控队列
		return 0;

	if(queue->front == queue->rear){
		queue->front = queue->rear = NULL;
	}else{
		queue->front = queue->front->next;
	}

	*data = node->data;
	free(node);
	return 1;
}

//遍历队列
void transQueue(Liqueue queue)
{
	int i = 1;

	QNode *p = queue.front;
	while(p != NULL ){
		printf("节点 : %d\n",p->data);
		 i++;
		 p = p->next;
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	Liqueue queue;
	initQueue(&queue);
	insertQueue(&queue, 0);
	insertQueue(&queue, 1);  
	insertQueue(&queue,2);
	insertQueue(&queue, 3);

	transQueue(queue);

	int tt;
	popQueue(&queue,&tt);
	printf("队尾取出1条数据 %d\n",tt);
	transQueue(queue);
	system("pause");
	return 0;
}

执行结果:

发布了27 篇原创文章 · 获赞 19 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/muaxi8/article/details/87921407