实验3.3 链队列的基本操作

头文件

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

定义结构体

typedef int Elemtype;
typedef struct Qnode
{
	Elemtype date;
	struct Qnode* next;
}QNode;
typedef struct
{
	QNode *rear,*front;
}qqueue;

初始化

void chushihua(qqueue* q)
{
	//创建头结点
	QNode* p;
	p = (QNode*)malloc(sizeof(QNode));
	if (!p)
		printf("\n分配内存失败!\n");
	p->next = NULL;
	//使头结点和尾结点在初始情况下均指向头结点
	q->front=q->rear=p;
}

入队

void rudui(qqueue* q, Elemtype e)
{
	//为新入队的结点分配内存空间
	QNode* p;
	p = (QNode*)malloc(sizeof(QNode));
	if (!p)
		printf("\n为新入队的结点分配内存失败!\n");
	//将结点插入链队列中
	p->next = NULL;
	p->date = e;
	q->rear->next = p;
	q->rear = p;
}

出队

void chudui(qqueue* q)
{
	QNode* p;
	//q->front指向头结点 q->front->next指向队首
	p= q->front->next;
	int x;
	x = p->date;
	printf("\n出队的元素的值为:%d\n", x);
    q->front->next=p->next;
	if (p == q->rear)
		q->rear = q->front;
	free(p);
}

取队列两端的元素值

void yuansuzhi(qqueue* q)
{
	printf("\n队首元素的值为:%d\n", q->front->next->date);
	printf("\n队尾元素的值为:%d\n", q->rear->date);
}

删除链队列

void shanchu(qqueue* q)
{
	while (q->front != NULL)
	{
		q->rear = q->front->next;
		free(q->front);
		q->front = q->rear;
	}
}

输出队列中各元素的值

void bianli(qqueue* q)
{
	QNode* p;
	p = q->front->next;
	printf("\n队列中元素为:\n");
	while (p != NULL)
	{
		printf("%d\t", p->date);
		p = p->next;
	}
}

主函数

int main()
{
	Elemtype x, y;
	do
	{
		printf("\n\n\t\t链式队列的基本操作\n\n");
		printf("\t\t请选择要进行的操作\n\n");
		printf("\t\t1.初始化链队列\n\n");
		printf("\t\t2.入队\n\n");
		printf("\t\t3.出队\n\n");
		printf("\t\t4.取队列两端的元素的值\n\n");
		printf("\t\t5.删除队列\n\n");
		printf("\t\t6.退出操作\n\n");
		scanf("%d", &x);
		switch (x)
		{
		case 1:
			qqueue* q;
			q = (qqueue*)malloc(sizeof(qqueue));
			chushihua(q);
			break;
		case 2:
			printf("\n请输入要入队的元素\n");
			scanf("%d", &y);
			rudui(q, y);
			bianli(q);
			break;
		case 3:
			chudui(q);
			bianli(q);
			break;
		case 4:
			yuansuzhi(q);
			break;
		case 5:
			shanchu(q);
			break;
		default:
			break;
		}
	} while (x < 6);
	
}

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值