链队列

#include "stdio.h"
#include "malloc.h"

#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE -1
#define OVERFLOW   -2
typedef int Status;
typedef int QElemType;
队列///
//队列:一种先进先出的线性表
//特点:先进先出,只允许在一端插入,另一端删除
//在队头删除,队尾插入

/链队列
//用链表表示的队列
//一个链队列要有一个头节点和一个尾节点才能表示
//为了方便初始化链队列我们也可以创建一个头节点
/下面是链队列的插入与删除,初始化///
typedef struct QNode {
	QElemType data;
	QNode* next;

}QNode, *QueuePtr;
//定义链队列结构体
typedef struct My {
	QNode* start;
	QNode* tail;
}LinkQueue;
//初始化
Status InitQueue(LinkQueue &Q)
{
	//为队列添加一个头节点
	Q.start = (QNode*)malloc(sizeof(QNode));
	Q.tail = Q.start;
	if (!Q.start) return(OVERFLOW);
	Q.start->next = NULL;
	return OK;
}
//插入
Status EnQueue(LinkQueue &Q, QElemType e)
{
	//在开辟一个QNode类型的数据,并让队尾指针指向新插入的元素
	QNode* q;
	q = (QNode*)malloc(sizeof(QNode));
	Q.tail->next = q;
	//队尾指向新插入的元素
	Q.tail = q;
	q->data = e;
	Q.tail->next = NULL;
	return OK;
}
//删除
Status DeQueue(LinkQueue &Q, QElemType &e)
{
	if (!Q.start->next) {
		printf("这是最后一个元素确定要删吗");
		return OVERFLOW;
	}
	//定义一个指针保存队列的第一个元素
	QNode* p;
	p = Q.start->next;
	//删除头元素
	//将头指针指向的元素删除,就是让头指针指向下一个元素
	Q.start->next = p->next;
	e = p->data;
	return OK;
}
//附加题:依次遍历从队头到队尾的元素,并利用printf()函数打印输出访问的元//素值。
void QueueTraverse(LinkQueue Q)
{
	QNode* q = Q.start;
	while (q->next != NULL) {
		q = q->next;
		printf("%d\t",q->data);
	}
}



int main()
{
	int e;
	LinkQueue Q;
	InitQueue(Q);
	for (int i = 0; i < 6; i++) {
		EnQueue(Q, i+1);
	}
	/*for (int i = 0; i < 7; i++) {
		DeQueue(Q,e);
		printf("%d\t", e);
	}*/
	QueueTraverse(Q);
	return 0;
}

首先,链队列的增删改查的函数实现是相对比较简单的,只要你明白链队列的操作是头指针与尾指针的操作就行。
我在进行链队列的函数实现是因为忽略了头节点,导致错误。
队列的知识点在代码中。😃 [:)]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值