链栈的实现
来源:互联网 发布:淘宝自然搜索怎么做 编辑:程序博客网 时间:2024/05/14 08:00
一、栈的定义
栈可理解为一种受限制的单链表,单链表可在标的两端进行插入删除,栈只能在一端进行插入删除,插入操作成为入栈(push),删除操作成为出栈(pop)。允许插入删除的一端称为栈顶(Top),另一端称为栈底(Button)。
特点:
(1)只能在栈顶进行插入删除;
(2)先入栈的元素在栈底,后入栈的元素在栈顶;
(2)具有“先进后出”(Last In First Out)的原则。
图示:
二、链栈
栈的实现可以通过顺序存储和链式存储实现。栈的链式存储是通过指针来实现的。
栈的结构定义如下:
typedef struct Node{int val;//数据域Node *pnext;//指针域}Node;typedef struct Stack{Node *pBase;//栈底指针Node *pTop; //栈顶指针}stackList;三、代码实现
LStack.h
#pragma oncetypedef struct Node{int val;Node *pnext;}Node;typedef struct Stack{Node *pBase;Node *pTop;}*stackList;Node* Buynode(); //创建一个节点bool Initisite(stackList &stack); //初始化bool push(stackList &stack, int val); //入栈bool pop(stackList &stack); //出栈bool IsEmpty(stackList &stack); //判断栈空int GetTop(stackList &stack); //取栈顶元素void display(stackList &stack); //打印栈元素
LStack.cpp
#include<iostream>#include"LStack.h"using namespace std;Node* Buynode()//创建一个节点{Node *s = (Node*)malloc(sizeof(Node));if (NULL == s) return NULL;s->pnext = NULL;return s;}bool Initisite(stackList &stack) //初始化{stack = (stackList)malloc(sizeof(stackList));if (NULL == stack) return false;stack->pBase = stack->pTop = Buynode();return true;}bool push(stackList &stack, int val) //入栈{Node *p = Buynode();p->val = val;p->pnext = stack->pTop;stack->pTop = p;return true;}bool pop(stackList &stack) //出栈{Node *p = NULL;if (!IsEmpty(stack)){p = stack->pTop;stack->pTop = p->pnext;free(p);p = NULL;return true;}return false;}bool IsEmpty(stackList &stack) //判断栈空{return stack->pBase == stack->pTop;}int GetTop(stackList &stack) //取栈顶元素{return stack->pTop->val;}void display(stackList &stack) //打印栈元素{Node *p = stack->pTop;if (!IsEmpty(stack)){while (stack->pBase != p){cout << p->val << " ";p = p->pnext;}}cout << endl;}
main.cpp
#include<iostream>#include"LStack.h"using namespace std;int main(){stackList stack ;Initisite(stack);push(stack, 12);push(stack, 23);push(stack, 34);push(stack, 45);push(stack, 56);puts("Get the top data:");printf("%d \n", GetTop(stack));puts("display stack:");display(stack);pop(stack);puts("display after pop a top data:");display(stack);return 0;}
运行结果:
0 0
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- mysql数据库的主从同步过程
- OpenCart 架构分析与概览
- HTTP 1.1与HTTP 1.0的比较
- 10. 享元模式
- PHPMailer-master使用
- 链栈的实现
- 使用immutable和react-immutable-render-mixin优化React Native视图渲染
- 接口和抽象类的区别详解,记录下
- 安卓开发截取当前屏幕图片及截取整个ListView图片并保存到本地
- Lambda的诞生
- 40个比较重要的Android面试题
- bitmap 二次采样
- [转载]标准库的字符串哈希算法
- 6. 代理模式