链式队列的入栈和出栈相关操作

8 篇文章 3 订阅
5 篇文章 0 订阅

关于链式队列,它主要由以下几个特点:

1、链式队列指针域有两个指针 front 和 rear 分别指向链表的头结点和最后一个节点

2、链式队列只能一端进,一端出

3、链式队列内部成员数量没有限制

以下为相关函数的具体实现方式:

1、链表队列函数整体如下:

#ifndef _LINKQ_H
#define _LINKQ_H

typedef int Data_t;

typedef struct node//用于存放链表元素成员信息和连接链表
{
	Data_t data;
	struct node *next;
}Node;

typedef struct linkqueue//由于指向队列的头部和尾部
{
	struct node *front;//链式队列的对头节点
	struct node *rear;//链式队列的队尾结点
}Linkq;

//创建队列
Linkq *create_linkq();

//判空
int linkq_is_empty(Linkq *q);

//入队
void enlinkq(Linkq *q, Data_t data);

//出队
void delinkq(Linkq *q, Data_t *data);


#endif

2、链表队列创建函数:

Linkq *create_linkq()
{
	Node *head  = (Node *)malloc(sizeof(Node));
	if(NULL == head){
		printf("Node malloc is failed\n");
		return NULL;
	}
	head->data = -1;
	head->next = NULL;
	
	Linkq *Q  = (Linkq *)malloc(sizeof(Linkq));
	if(NULL == head){
		printf("Link Node malloc is failed\n");
		return NULL;
	}
	Q->front = head;
	Q->rear = head;
	
	return Q;
}

3、对链表进行判空操作,便于后续出栈等操作的进行

int linkq_is_empty(Linkq *Q)
{
	if(Q->front == Q->rear){
		return 1;
	}
	return 0;
}

4、链表队列的入栈操作

void enlinkq(Linkq *Q, Data_t data)
{
	Node *new  = (Node *)malloc(sizeof(Node));
	if(NULL == new){
		printf("new malloc is failed\n");
		return;
	}
	
	new->next = Q->rear->next;
	Q->rear->next = new;
	new->data = data;
	
	printf("%d ", Q->front->next->data);
}

5、链表队列的出栈操作

//出栈
void delinkq(Linkq *Q, Data_t *data)
{
	linkq_is_empty(Q);
	
	*data = Q->front->next->data;
	
	Node *del = Q->front->next;
	
	Q->front->next = Q->front->next->next;
	
	free(del);
	del = NULL;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

玖尾猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值