数据结构_栈
来源:互联网 发布:java识别屏幕数字 编辑:程序博客网 时间:2024/06/10 17:43
栈
栈是一种特殊的线性表
只能在表尾进行插入和删除操作的线性表
栈有两种存储结构:顺序存储和链式存储
先进后出/后进先出
栈的链式存储结构
typedef struct StackNode{ ElemType data; //存放数据 struct StackNode *next;}StackNode,*LinkStackPtr;typedef struct LinkStack { LinkStackPtr top; //栈顶指针 int count; //元素个数};
进栈(Push)
头插法将数据插在表头,即栈顶
//push 入栈Status Push(LinkStack* s, ElemType e) { LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode)); //分配内存 p->data = e; p->next = s->top; s->top = p; s->count++; return OK;}
出栈(Pop)
输出栈顶元素并删除该结点
//pop 出栈,并删除栈顶结点Status Pop(LinkStack*s, ElemType *e) { LinkStackPtr p; if (StackEmpty(s)) { cout << "栈空" << endl; return ERROR; } p = s->top; s->top = p->next; *e = p->data; free(p); s->count--; return OK;}
栈空
Status StackEmpty(LinkStack* s) {//栈空 if (s->count == 0) { return TRUE; } else return FALSE;}
完整代码
/*链式栈的相关操作*/#include <iostream>using namespace std;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int ElemType;typedef int Status;typedef struct StackNode{ ElemType data; //存放数据 struct StackNode *next;}StackNode,*LinkStackPtr;typedef struct LinkStack { LinkStackPtr top; //栈顶指针 int count; //元素个数};Status StackEmpty(LinkStack* s) {//栈空 if (s->count == 0) { return TRUE; } else return FALSE;}//push 入栈Status Push(LinkStack* s, ElemType e) { LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode)); //分配内存 p->data = e; p->next = s->top; s->top = p; s->count++; return OK;}//pop 出栈,并删除栈顶结点Status Pop(LinkStack*s, ElemType *e) { LinkStackPtr p; if (StackEmpty(s)) { cout << "栈空" << endl; return ERROR; } p = s->top; s->top = p->next; *e = p->data; free(p); s->count--; return OK;}int main(){ LinkStack* l = (LinkStack*)malloc(sizeof(LinkStack)); l->count = 0; while (true) { cout << "栈的基本操作" << endl; cout << "1.入栈" << endl; cout << "2.出栈" << endl; cout << "0.退出" << endl; int op; cin >> op; switch (op) { case 1: cout << "请输入入栈的数据,输入-1即结束" << endl; int n; cin >> n; while (n != -1) { Push(l, n); cin >> n; } break; case 2: cout << "出栈:"; int m; while (l->count > 0) { Pop(l, &m); cout << m << " "; } cout << endl; case 0: cout << "再见!" << endl; return 0; default: break; } } return 0;}
栈的顺序存储结构
阅读全文
1 0
- 数据结构_栈
- 12-数据结构_栈
- 数据结构_顺序栈
- 数据结构_栈
- 数据结构_栈
- Java数据结构_栈
- 数据结构_栈
- 数据结构_栈
- 数据结构_递归算法_问题_栈溢出
- 数据结构_栈的应用_十进制转化为二进制
- 数据结构_线性结构_栈与队列
- 数据结构_线性结构_栈与队列
- C++_012_数据结构_栈_顺序表储存版
- 数据结构的C实现_顺序栈
- 数据结构_栈实现数值转换
- 数据结构_栈、队列和树(Java)
- 数据结构基础_栈和队列
- 数据结构_栈的相关操作
- ubuntu使用apt-get安装nginx
- Python练习3-操作MySQL数据库
- java中导包顺序报错
- Swing组件继承关系
- 页面添加自动排序序号
- 数据结构_栈
- 小程序 三种方法 页面跳转
- opacity、visibility、display对比分析
- Go调用DLL
- 事物的有关设置
- JAVA的一次编译,到处运行,你知道多少?
- 不怕被病毒勒索!用内网穿透软件花生壳组建私有云
- Html基础
- 浏览器相关(3)