数据结构——C语言实现队列的初始化,入队出队,查看等操作

数据结构——C语言实现队列的初始化,入队出队,查看等操作

#define _CRT_SECURE_NO_WARNINGS 1

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

#define length 10

typedef int DataType;

typedef struct QueueNode
{
	DataType _data;
	struct QueueNode* _next;
}QueueNode;

typedef struct Queue
{
	QueueNode* _head;
	QueueNode* _tail;
}Queue;

void QueueInit(Queue* q);//初始化
void QueuePush(Queue* q, DataType x);//加入
void QueuePop(Queue* q);//弹出
DataType QueueFront(Queue* q);//看头
DataType QueueBack(Queue* q);//看尾
size_t QueueSize(Queue* q);//看大小
int QueueEmpty(Queue* q);//判空

int main()
{
	Queue q;
	int x = 0;
	int i = 0;
	QueueInit(&q);
	QueuePush(&q, 1);
	QueuePush(&q, 3);
	QueuePush(&q, 2);
	QueuePush(&q, 6);
	QueuePush(&q, 2);
	//QueuePop(&q);

	
	x = QueueFront(&q);
	i = QueueBack(&q);

	printf("%d,%d", x, i);
	printf("\n%d",QueueSize(&q));
	system("pause");
	return 0;
}


void QueueInit(Queue* q)
{
	assert(&q);
	//申请空间
	q->_head = (QueueNode*)malloc(length * sizeof(QueueNode));
	if (!q->_head)
	{
		exit(0);
	}
	q->_tail = q->_head;
	q->_head->_next = NULL;
	return;
}

void QueuePush(Queue* q, DataType x)
{
	assert(&q);
	//申请节点空间	
	QueueNode* newNode;
	newNode = (QueueNode*)malloc(sizeof(QueueNode));

	if (NULL == newNode)
	{
		exit(0);
	}

	newNode->_data = x;
	newNode->_next = NULL;
	q->_tail->_next = newNode;
	q->_tail = newNode;
	return;
}

void QueuePop(Queue* q)
{
	assert(&q);
	if (QueueEmpty(q))
	{
		return;
	}
	QueueNode* p;
	p = q->_head->_next;//p指向第一个数据
	q->_head->_next = p->_next;//把头结点的next指向第一个数据的next
	if (q->_tail == p)//如果只剩一个元素,把tail指针指向头结点
	{
		q->_tail = q->_head;
	}
	free(p);
}

DataType QueueFront(Queue* q){
	assert(q);
	if (QueueEmpty(q))
	{
		return NULL;
	}
	return q->_head->_next->_data;
}

DataType QueueBack(Queue* q){
	assert(q);
	if (QueueEmpty(q))
	{
		return NULL;
	}
	return q->_tail->_data;
}

size_t QueueSize(Queue* q)
{
	return (q->_tail - q->_head) / sizeof(QueueNode) - 1;
}

int QueueEmpty(Queue* q)
{
	return q->_head == q->_tail;
}

猜你喜欢

转载自blog.csdn.net/likunkun__/article/details/81713796