利用双向循环链表实现链表队列的实例

本文通过C语言实现双向循环链表为基础的队列数据结构,重点介绍如何利用链表库中的功能进行队列操作,包括插入和删除元素,特别地,为了方便出队操作,库中增加了按地址删除链表元素(包括头节点)的函数。
摘要由CSDN通过智能技术生成

利用前面写的双向循环链表库文件中的功能,实现队列存储结构

库中并非所用功能都用到,为实现方便出队,库增加了依据地址删除链表元素的功能(包含头节点,头节点的下一节点替代)

主函数代码

#include "dnode_lib.h"

typedef struct Nqueue{
   
	pdnode p_front;
	pdnode p_rear;

}nqueue, *pnqueue;
void init_node_queue(pnqueue  ptr, int num);
//creat a queue with only one element,value is num;
//use library :dnode_lib.c and dnode_lib.h
//queue's p_front and p_rear point to the same one node element

void en_nqueue(pnqueue ptr, int val_f);
//add one element to queue's tail
//use library :dnode_lib.c and dnode_lib.h
//ptr is target queue, val_f is value to enter queue


int dequeue(pnqueue ptr);
//dequeue
//front element will be removed ,that element's value is returned
//this function calls "del_dnode_addr(pdnode * p_head, pdnode p_dnode)"
//that called  function will delete any element pointed by its argc"* p_head",including node's head
//after deleted ,free that element's memory

void show_nqueue(pnqueue ptr);
//show all queue's element value 


int main(void){
   
	nqueue n_queue;
	pnqueue p_nqueue = &n_queue;
		

	int num;
	printf("input first val of queue\n");
	scanf("%d",&num);
	init_node_queue(p_nqueue, num);
	printf("init val is %d\n",p_nqueue->p_front->val);

	en_nqueue(p_nqueue, 99);
	en_nqueue(p_nqueue, 98);
	en_nqueue(p_nqueue, 97);
	en_nqueue(p_nqueue, 96);

	show_nqueue(p_nqueue);
	printf("__________apd group done____________\n")	;	

	dequeue(p_nqueue);
	show_nqueue(p_nqueue);
	
	dequeue(p_nqueue);
	show_nqueue(p_nqueue);
	
	dequeue(p_nqueue)	;
	show_nqueue(p_nqueue);

	dequeue(p_nqueue)	;
	show_nqueue(p_nqueue);

	dequeue(p_nqueue)	;
	show_nqueue(p_nqueue);
	
	printf("__________del group done____________\n")	;	
	en_nqueue(p_nqueue, 99);
	show_nqueue(p_nqueue);

	return 0;
}

void init_node_queue(pnqueue  ptr, int num){
   

	pdnode p_dnode = init_stal_dnode();
	p_dnode->val = num;
	ptr->p_front = p_dnode;
	ptr->p_rear = p_dnode;
	ptr->p_rear->fwd = p_dnode;
	ptr->p_rear->bwd = p_dnode;
	printf("init queue done \n");

}


void en_nqueue(pnqueue ptr, int val_f){
   
	pdnode p_dnode = ptr->p_front;
	ptr->p_rear = apd_dnode(p_dnode, val_f);

	printf("append queue :val is %d\n",ptr->p_rear->val);


}


int dequeue(pnqueue ptr){
   
	
	if(ptr->p_front 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值