顺序栈和链栈
来源:互联网 发布:好看的淘宝金酷娃玩具 编辑:程序博客网 时间:2024/06/08 09:37
今天学了顺序栈和链栈,自己写了一下代码:
//#include <stdio.h>//#include <stdlib.h>/*//顺序栈的实现与简单应用//实现提供操作init_stack(初始化链表).clearstack(制空栈),Push(插入),Pop(删除),Is_empty(判空).Is_full(判满)//GetTop(读栈顶元素)//代码:#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>using namespace std;typedef int typestack;#define stacksize 100typedef struct {int top;typestack stack[stacksize];}seqstack;bool Is_empty(seqstack *);bool Is_full(seqstack *);void Init_stack(seqstack *);void clear_stack(seqstack *);void Push(seqstack *,typestack );typestack Pop(seqstack *);int Search_stack(seqstack *,typestack );typestack GetTop(seqstack *);bool Is_empty(seqstack *p){return p->top==-1;}bool Is_full(seqstack *p){return p->top==stacksize-1;}void Init_stack(seqstack *p){p->top=-1;}void clear_stack(seqstack *p){p->top=-1;}void Push(seqstack *p,typestack x){if(Is_full(p)){printf("栈满\n");return ;}p->stack[++p->top]=x;}typestack Pop(seqstack *p){if(Is_empty(p)){printf("栈空\n");return 0;}return p->stack[p->top--];}int Search_stack(seqstack *p,typestack x){for(int i=0;i<=p->top;i++)if(p->stack[i]==x)return i+1;printf("不存在\n");return 0;}typestack GetTop(seqstack *p){if(Is_empty(p)){printf("栈空");return 0;}return p->stack[p->top];}int main(){int i;seqstack x;seqstack *p=&x;Init_stack(p); for(i=0;i<7;i++) Push(p,i);while(!Is_empty(p))printf("%d ",Pop(p));return 0;}*///链栈//提供如下操作:1判空2插入3清空4删除5查看栈顶元素#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;typedef int typestack;typedef struct seqs{typestack x;struct seqs *next;}*seqstack,seqstackment;bool Is_empty(seqstack &top){return top==NULL;}void Push(seqstack &top,typestack v){seqstack p=(seqstack)malloc(sizeof(seqstackment));p->x=v;p->next=top;top=p;}typestack Pop(seqstack &top){if(!Is_empty(top)){seqstack p=top->next;typestack v=top->x;free(top);top=p;return v;}printf("栈空\n");return 0;}typestack GetTop(seqstack &top){if(!Is_empty(top))return top->x;printf("栈空\n");return 0;}void clear_stack(seqstack &top){while(Is_empty(top)) Pop(top);}int main(){ seqstack p=NULL; for(int i=0;i<7;i++)Push(p,i);while(!Is_empty(p))printf("%d ",Pop(p));return 0;}下面是栈的一些简单应用:
括号匹配:
bool Is_match(char ch1,char ch2){if(ch1=='(' && ch2==')' || ch1==')' && ch2=='(' )return true;else if(ch1=='[' && ch2==']' || ch1==']' && ch2=='[')return true;else if(ch1=='{' && ch2=='}' || ch1=='}' && ch2=='{')return true;return false;}void Kh_Match(char *str){seqstack top=NULL;char ch;for(int i=0;str[i];i++){switch(str[i]){case '(':case '[':case '{':Push(top,str[i]);break;case ')':case ']':case '}':if(Is_empty(top)){printf("右括号多余\n");return ;}ch=GetTop(top);if(Is_match(ch,str[i])){Pop(top);break;}else{printf("括号不匹配\n");return ;}}}if(Is_empty(top))printf("括号匹配\n");elseprintf("左括号多余\n");}
//10进制与其他的转换(10转2、8、16)void Trans_num(int n,int m)//2,8{ seqstack top=NULL; while(n) { Push(n%m); n/=m; } if(Is_empty(top)) printf("0\n"); while(!Is_empty(top)) printf("%d ",Pop()); }
//运算符优先级bool Is_number(char ch){ switch(ch) { case '0': case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9': return true; default : return false; }}
bool Comparech(char ch1,char ch2){ switch(ch1) {case '*': switch(ch2) {case '*':case '/':return false;case '#':case '+':case '-':return true; }case '/': switch(ch2) {case '*':case '/':return false;case '#':case '+':case '-':return true; }case '+': switch(ch2) {case '*':case '+':case '-':case '/':return false;case '#':return true; }case '-': switch(ch2) {case '*':case '/':case '+':case '-':return false;case '#':return true; }case '#':return false; }}
int Calcu_complex(){ seqstack Num==NULL; seqstack Ope=NULL; Push(Ope,'#'); char ch=getchar(); char str; int a,b; if(ch=='#'){ printf("there are no operating enements\n"); return 0; } while(ch!='#' || GetTop(Ope)!='#') { if(Is_number(ch)){ Push(Num,ch-'0'); ch=getchar(); } else { if(Comparech(ch,GetTop(Ope))){ Push(Ope,ch); ch=getchar(); } else{ a=Pop(Num); b=Pop(Num); str=Pop(Ope); switch(str) { case '*':Push(Num,b*a);break; case '/':Push(Num,b/a);break; case '+':Push(Num,b+a);break; case '-':Push(Num,b-a);break; } } } } return GetTop(Num);}
当然这些只不过是栈的简单应用,但是栈本身的思想:先进后出需要掌握。。。。
- 顺序栈和顺序队列
- 顺序栈和链栈
- 顺序栈和链栈
- 顺序栈和链栈
- 顺序栈和链栈
- 顺序栈、链栈、顺序队和链队小结
- 顺序栈和链表栈。
- 顺序栈和队列
- 顺序栈和链栈呀!
- 参数入栈顺序和计算顺序
- C#实现顺序栈和链栈
- 顺序栈和链栈实现汉洛塔
- 顺序栈和链栈的实现
- 实验四:顺序栈和链栈
- 实验三 顺序栈和链栈
- 实验三、顺序栈和链栈
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)
- 顺序栈和链式栈
- 网址
- 实例解析linux内核I2C体系结构 .
- Kconfig/Makefile/driver add to menuconfig
- android和ios sigpipe信号导致程序异常退出的问题
- 关于python的IDE——Eric4
- 顺序栈和链栈
- 封装fastjson为spring mvc的json view
- 中兴面试214
- sql性能查询
- Carousel
- java连接sqL2008 数据库实例
- Agile Tour 2013大连站组织者、志愿者招募
- 文本文件搜索小工具
- [设计模式笔记]二. 结构型模式--12.Flyweight模式(享元模式)(二)