C语言实现队列基本操作-初始化,入队,出队,打印,删除

C语言实现队列基本操作-初始化,入队,出队,打印,删除

C语言:

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

// 队列的实现
#define OVERFLOW -2 
#define OK 1
#define ERROR 0

typedef int Status;
typedef int QElemType;
 
typedef struct QNode{
	QElemType data;
	struct QNode * next;
}QNode, *QueuePtr;
typedef struct {
	QueuePtr front;            // 队头指针 
	QueuePtr rear;             // 队尾指针 
}LinkQueue;

Status InitQueue(LinkQueue &Q)
{
	// 构造一个空队列
	Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
	if(!Q.front) exit(OVERFLOW);         // 分配存储失败 
	Q.front->next = NULL;
	return OK;
}

Status DestroyQueue(LinkQueue &Q)
{
	// 销毁队列 Q
	while(Q.front){
		Q.rear = Q.front->next;
		free(Q.front);
		Q.front = Q.rear;
	} 
	return OK;
}

Status EnQueue(LinkQueue &Q, QElemType e)
{
	// 插入元素 e 为 Q 的新的队列元素 
	QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
	if(!p) exit(OVERFLOW);          // 存储分配失败
	p->data = e;
	p->next = NULL;                // 队尾 next == NULL,有 data 
	Q.rear->next = p;
	Q.rear = p;                    // 更新队尾 
	return OK; 
}

Status DeQueue(LinkQueue &Q, QElemType &e)
{
	// 若对头不空,则删除对头元素,用 e 返回其值,并返回 OK,否则返回 ERROR
	if(Q.front == Q.rear) return ERROR;
	QueuePtr p = Q.front->next;         // Q.front 没有 data, next != NULL(除非空队列) 
	e = p->data;
	Q.front->next = p->next;            // 更新队头 
	if(Q.rear == p) Q.rear = Q.front;   // 队列为空了 
	free(p);
	return OK;
}

Status PrintQueue(LinkQueue Q)
{
	// 打印队列 Q 全部元素 
	QueuePtr p = Q.front;
	while(p->next){
		printf("%d  ", p->next->data);
		p = p->next;
	}
	printf("
"); 
}
int main()
{
	LinkQueue q;
	InitQueue(q);       // 初始化队列
	
	QElemType e1 = 666, e2 = 888;    // 向队列添加元素 
	EnQueue(q, e1);
	EnQueue(q, e2);
	printf("队列元素:  "); 
	PrintQueue(q);        // 打印队列 
	
	QElemType e3;
	DeQueue(q, e3);
	printf("删除元素为: %d 
", e3);
	printf("队列元素:  "); 
	PrintQueue(q);        // 打印队列 	
	
	DestroyQueue(q);      // 删除队列 
	
	return 0;
}
/* Code Running Results
队列元素:  666  888
删除元素为: 666
队列元素:  888
*/

栈和单链线性表基本操作实现:

单链线性表

原文地址:https://www.cnblogs.com/jiaohuadehulike/p/14295020.html