李春葆 上机实验题3——实验题4:实现链队的各种基本运算的算法

实现链队的各种基本运算的算法

一、实验内容

编写一个程序,实现链队(假设栈中的元素类型 ElemType为char的各种基本运算,并在此基础上设计一个程序完成以下功能。
(1)初始化链队q。
(2)判断链队q是否非空。
(3)依次进链队元素a、b、c。
(4)出队一个元素,输出该元素。
(5)依次进链队元素d、e、f。
(6)输出出队序列。
(7)释放链队

二、实验目的

本实验旨在通过编写一个程序实现链队的存储结构和各种基本运算的算法,包括初始化、判断链队是否非空、进队、出队、输出出队序列以及释放链队。通过这个实验,希望学生能够深入理解链队数据结构的原理和实现方式,并且掌握链队中各种基本运算算法的设计和实现技巧。

三、实验设计方案

1.定义链队结构体

首先需要定义链队的结构体,包括一个头指针front和一个尾指针rear,以及一个用于存储队列元素的链表。头指针front指向链表的头部,尾指针rear指向链表的尾部。

2.初始化链队

初始化链队可以通过将头指针front和尾指针rear都置为NULL来实现。

3.判断链队是否非空

判断链队是否非空可以通过判断头指针front和尾指针rear是否相等来实现。如果头指针front和尾指针rear相等,则链队为空;否则,链队非空。

4.依次进队元素a、b、c

进队操作可以通过在尾指针rear处创建新节点并将其插入到链表的尾部来实现。具体步骤如下:

  • 创建新节点并设置其数据为需要进队的元素。
  • 将rear指针指向新节点。
  • 如果队列已满,则将front指针指向新节点;否则,将front指针指向下一个节点。重复以上步骤,直到所有元素都进队。5.出队一个元素,输出该元素

出队操作可以通过遍历链表并输出当前节点的数据来实现。具体步骤如下:

  • 将front指针指向下一个节点。
  • 输出front指向的节点的数据。重复以上步骤,直到队列为空。6.依次进队元素d、e、f

同上,进队操作可以通过在尾指针rear处创建新节点并将其插入到链表的尾部来实现。重复步骤4中的步骤,直到所有元素都进队。

7.输出出队序列

输出出队序列可以通过遍历链表并输出每个节点的数据来实现。具体步骤如下:将front指针指向下一个节点,输出front指向的节点的数据。重复以上步骤,直到队列为空。

四、代码实现

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

typedef struct qnode{
	char data;
	struct qnode *next;
}DataNode;

typedef struct {
	DataNode *front; 
	DataNode *rear;
}LinkQuNode; 

//初始化队列 
void InitQueue(LinkQuNode *&q){
	q=(LinkQuNode *)malloc(sizeof(LinkQuNode));
	q->front=q->rear=NULL;
}

//销毁队列 
void DestroyQueue(LinkQuNode *&q){
	DataNode *pre=q->front,*p;
	if(pre!=NULL){
		p=pre->next;
		while(p!=NULL){
			free(pre);
			pre==p;
			p=p->next;
		}
		free(pre);
	}
	free(q);
}

//判断队列空
bool QueueEmpty(LinkQuNode *q){
	return(q->rear==NULL);
} 

//进队列 
void enQueue(LinkQuNode *&q,char e){
	DataNode *p;
	p=(DataNode *)malloc(sizeof(DataNode));
	p->data=e;
	p->next=NULL;
	if(q->rear==NULL) q->front=q->rear=p;
	else{
		q->rear->next=p;
		q->rear=p;
	} 
} 

//出队列 
bool deQueue(LinkQuNode *&q,char &e){
	DataNode *t;
	if(q->rear==NULL)return false;
	t=q->front;
	if(q->rear==q->front) q->front=q->rear=NULL;
	else q->front=q->front->next;
	e=t->data;
	free(t);
	return true;
} 

int main(){
	LinkQuNode *s;
	char e;
	//1初始化队列 
	InitQueue(s);
	printf("1、初始化队列:完成!\n");
	//2判断队列是否为空
	printf("2、判断队列是否为空:");
	QueueEmpty(s);
	if(QueueEmpty(s))printf("队列为空!\n");
	else printf("队列非空!\n");
	//3依次进队列元素a、b、c、d、e
	printf("3、依次进队列元素a、b、c、d、e:");
	char a[6]={'a','b','c','d','e','f'};
	for(int i=0;i<3;i++){
		enQueue(s,a[i]);
		printf("%c\t",a[i]);
	}
	printf("\n");
	//4出队一个元素,并输出 
	printf("4、出队一个元素,该元素为:"); 
	deQueue(s,e);
	printf("%c\n",e);
	//5依次进队列元素d、e、f 
	printf("5、依次进队列元素d、e、f:");
	for(int i=3;i<6;i++){
		enQueue(s,a[i]);
		printf("%c\t",a[i]);
	}
	printf("\n");
	//6输出出队列序列
	printf("5、输出出队列序列:");
	while(s->front!=NULL){
		deQueue(s,e);
		printf("%c\t",e);
	}
	printf("\n");
	//7释放栈
	printf("7、释放队列:完成!");
	DestroyQueue(s); 
	return 0;
}

五、运行结果

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

噗-噗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值