栈(c语言)
来源:互联网 发布:c 调用程序的编程 编辑:程序博客网 时间:2024/06/06 09:59
前言
栈其实用c++写还是很简单方便的,熟悉栈后,在一些题你会情不自禁的去选择用栈来解决问题,当然用栈的时候你也会面临爆栈或者超时的问题,但是不可否认还是一个很好用的东西。在一开始学习的时候的确感觉这玩意还不如去开一个数组去模拟,但是当你做了一些关于栈和队列的习题之后就可以感受到他们的方便了,当然是c++,至于c语言还是很麻烦的。(相关习题可以在我的博客栈和队列分类中寻找)
栈的顺序储存
栈就是一个后进先出的线性表,至于为啥他就后进先出,只能说这就是规则,他就是为此而生的,它就是这么一个容器,一个后进先出的容器。
课本对这个栈的解释还是比较好的,他就像一个洗碗池,后进的先出。
CODE
/*顺序栈*/#include <stdio.h>#include <stdlib.h>#define INIT_SIZE 100#define ADD_SISE 10#define SelemType inttypedef struct{ SelemType *base;//起始地址,就是栈底(洗碗池的低)栈为空时为0; SelemType *top; //栈顶指针,指向栈顶元素的下一位置 int size; //栈的存储空间大小,以元素个数为单位}SeqStack;//初始化int INIT(SeqStack *S){ //给base开辟空间好存元素啊,100个SelemType型的空间 S->base=(SelemType *)malloc(INIT_SIZE*sizeof(SelemType)); if(!S->base) printf("space is full");//存储分配失败 else { S->top=S->base;//初始状态栈底栈顶相等 S->size=INIT_SIZE; } return 0;}//判断栈是否为空,为空返回1,否则返回0int empty(SeqStack *S){ if(S->top==S->base) return 1; else return 0;}//入栈int push(SeqStack *S,SelemType x){ if((S->top)-(S->base)==S->size) { S->base=(SelemType *)realloc(S->base,(S->size+ADD_SISE)*sizeof(SelemType)); if(S->base==NULL) return 0; S->top=S->base+S->size;//求新空间栈顶指针,栈顶指针永远是栈底加上size S->size=S->size+ADD_SISE; } *S->top=x; S->top++; return 0;}int pop(SeqStack *S){ SelemType x; if(S->top==S->base) return 0; else { S->top--; x=*S->top; return x;//想不想返回这个删去的值无所谓 }}int top(SeqStack *S){ SelemType x; if(S->top==S->base) return 0; else { x=*(S->top-1);//为啥要减1?我们定义的栈顶指针,指向栈顶元素的下一位置! return x; }}int main(){ SeqStack S; INIT(&S); for(int i=1;i<=3;i++)//按顺序把1 2 3入栈 push(&S,i); for(int i=0;i<3;i++) { printf("%d ",top(&S));//输出栈顶 pop(&S);//弹出栈顶 } return 0;}
额,那么我们就比较一下c++的代码,栈是怎么个比较简单的
#include <stdio.h>#include <stack>using namespace std;int main(){ stack<int>s; for(int i=1;i<=3;i++) s.push(i); for(int i=1;i<=3;i++) { printf("%d ",s.top()); s.pop(); } return 0;}
阅读全文
0 0
- 栈(C语言)
- 栈(C语言)
- 栈(c语言)
- 栈(C语言实现)
- 顺序栈(C语言)
- C语言(一)C语言格式
- C语言笔记(C++)
- 栈的建立&操作(C语言)
- 顺序栈的实现(C语言)
- C语言 迷宫(栈实现)
- 数据结构--顺序栈实现(c语言)
- 顺序栈的实现(C语言)
- c语言计算器(栈实现)
- 数据结构链栈(C语言)
- 迷宫求解(C语言 栈)
- 栈的链式实现(C语言)
- C语言实现栈(数组)
- 栈的C语言实现(链表)
- LINUX上pycharm远程解释器运行py程序在本地机器上显示plot命令画出来的图像
- 【ExtJs学习笔记】4.DOM操作
- 矩阵快速幂
- PAT-乙级-1016-部分A+B
- LeetCode--4Sum
- 栈(c语言)
- LeetCode:384. Shuffle an Array
- 编程杂记--事务相关
- LintcodeA + B 问题
- (CodeForces
- Linux进阶之 rmdir 命令
- ElementTree
- I
- Java异常之try,catch,finally,throw,throw