用双向链表实现一个栈和队列
来源:互联网 发布:淘宝开虚拟店怎么样 编辑:程序博客网 时间:2024/06/06 22:04
下面将介绍一下,如何使用双向链表来分别实现“堆栈”和“队列”,其中有的部分是一样,所以就直接调用了。
堆栈:后进先出,入栈和出栈都是在栈顶进行;
队列:先进先出,在队列尾插入元素,从队列头删除元素。
#include<stdio.h>#include<stdlib.h>#include"stack.h"// 判断堆栈是否为空 // 为空,返回1;不为空,返回0 static int StackIsEmpty(List *plist){if(plist->count==0)return 1;elsereturn 0;}// 判断堆栈是否为满 // 为满,返回1;不为满,返回0 static int StackIsFull(List *plist){if(plist->count==plist->max)return 1;elsereturn 0;}// 堆栈初始化 // 建立一个带哨兵的空链表 // 失败,返回0;成功:返回1 int StackInit(List *plist,int length){struct node* pnew;pnew=(struct node*)malloc(sizeof(struct node));if(pnew==0){return 0;}pnew->next=pnew;pnew->prev=pnew;plist->head=pnew; //哨兵元素,头指针指向头结点plist->count=0;plist->max=length;return 1;}//压栈(在双向链表的头部添加一个元素)// 将元素添加到链表头(哨兵元素之后) // 成功,返回1;失败,返回0 int StackPush(List *plist,Item item){struct node *pnew;if(StackIsFull(plist))//若栈满,返回0return 0;pnew=(struct node*)malloc(sizeof(struct node));if(pnew==0)return 0;pnew->item=item;pnew->prev=plist->head;pnew->next=plist->head->next;plist->head->next->prev=pnew;(plist->count)++;return 1;}//出栈(在双向链表的头部删除一个元素)//失败,返回0;成功,返回1int StackPop(List *plist,item *pitem){struct node *pde1;if(StackIsEmpty(plist))return 0;pde1=plist->head->next;*pitem=pde1->item;pde1->next->prev=plist->head;// 改变下一个节点的前向指针plist->head->next=pde1->next;free(pde1);//释放内存(plist->count)--;return 1;}//队列初始化(和栈的初始化的一样的)int QueueInit(List *plist,int length){return StackInit(plist,length);}//添加元素到队尾int EnQueue(List *plist,Item item) { struct node *pdel;if(StackIsFull(plist))//若队列为满,返回0return 0;pde1=(struct node*)malloc(sizeof(struct node));if(pde1==0)return 0;pde1->item=item;//待插入的元素itempde1->next=plist->head;plist->head->prev=pde1;(plist->count)++;return 1;} // 从队头删除元素 int DeQueue(List *plist,Item *pitem) { return StackPop(plist,pitem);}
1 0
- 用双向链表实现一个栈和队列
- 双向链表实现一个队列
- 使用双向链表实现队列和栈
- Java双向队列,用双向链表实现的
- 用双向链表实现一个栈
- 用PHP实现一个双向队列
- 用PHP实现一个双向队列
- 双向链表实现队列
- php 实现队列和双向队列及其用例
- 用数组实现栈(Stacks)、队列(Queue)和双向链表(Doubly Linked List)的伪代码
- 一个用Java实现的双向队列,可以分别在头尾插入和删除节点
- 使用带sentinel哨兵的双向链表实现栈和队列
- 双向链表 + 栈 + 队列
- 双向链表、队列与栈的C/C++实现
- pthread&双向链表实现队列
- 队列的双向链表实现
- 双向队列的链表实现
- 双向链表实现的消息队列
- uva348 Optimal Array Multiplication Sequence
- chapter3 常用的运算符
- mybatis返回插入值的主键
- Android 中文件类型与MIME的匹配表
- C++第四次作业(补)x
- 用双向链表实现一个栈和队列
- Twitter-Snowflake,64位自增ID算法详解
- Java多线程-Executor框架:ScheduledThreadPoolExecutor
- 奇怪的PyRun_SimpleFile崩溃问题
- [python]迭代器
- 【南理oj】1112 - 求次数(STL - map & string)
- 乐视控股(北京)有限公司
- Android动态加载补充 加载SD卡中的SO库
- Occam剃刀原理及过拟合问题