来源:互联网 发布:阿里云 paas iaas 编辑:程序博客网 时间:2024/06/12 19:05

栈:特殊的线性表(只允许在一边进行操作),分顺序栈(顺序表实现),链栈(链表实现)

特点:后进先出


顺序栈:

栈头在线性表表表尾(线性表表尾插入删除时间复杂度都是O(1))

定义:

typedef struct Stack
{
 int *elem;
 int top;  //栈顶指针,当前可以存放数据的下标
 int stacksize;  //栈的总格子数
}Stack,*PStack;


链栈:

栈头在链表表表头(链表表头插入删除时间复杂度都是O(1))

定义:

typedef struct SNode
{
 int data;
 struct SNode *next;
}SNode,*PLStack;



利用栈特点解决实际问题

eg1:判断括号是否匹配

(遇到左括号就入栈,遇到右括号,先把右括号置成左括号,栈顶元素出栈,与出栈元素比较,相等,指针后移,不等则不匹配)

bool match(char *str){Stack s;InitStack(&s);while(*str !='\0'){if(*str=='(' || *str=='[' || *str=='{'){Push(&s,*str);}else if(*str==')'){*str='(';int tmp;Pop(&s,&tmp);if(*str!=tmp){return false;}}else if(*str==']'){*str='[';int tmp;Pop(&s,&tmp);if(*str!=tmp){return false;}}else if(*str=='}'){*str='{';int tmp;Pop(&s,&tmp);if(*str!=tmp){return false;}}str++;}return true;}


eg2.编程对一个逆波兰式(后缀表达式)进行求值,如“435*+23*-”的结果是13,函数的参数为字符串(后缀表达式),假定字符串为正确的逆波兰式。

(只要遇到数字就入栈,遇到运算符,就从栈顶出两个值,判断是什么运算符,将出栈元素运算结果入栈)

int getvalue(char *str){int val=0;Stack s;InitStack(&s);while(*str !='\0'){int tmp1;int tmp2;if(isdigit(*str)){Push(&s,*str-'0');}else{Pop(&s,&tmp1);Pop(&s,&tmp2);if(*str=='+'){val=tmp2+tmp1;}else if(*str=='-'){val=tmp2-tmp1;}else if(*str=='*'){val=tmp2*tmp1;}else{val=tmp2/tmp1;}Push(&s,val);}str++;}return val;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魅族手机gps信号弱怎么办 魅族手机突然没有信号怎么办 魅族手机流量信号不好怎么办 魅族手机wifi信号差怎么办 魅族5s信号不好怎么办 魅族mx5的双击不亮屏怎么办 魅族mx5返回键失灵怎么办 电信苹果3g网速慢怎么办 魅蓝6开不了机怎么办 手机应用被锁了怎么办 魅族电池不耐用怎么办 魅族mx6现在很卡怎么办 魅族e2手机屏幕背景黑色怎么办 魅族x6手机锁了怎么办 360n5返回键失灵怎么办 360n5返回键不好用怎么办 魅族手机锁屏怎么办 魅族手机锁住了怎么办 手机己锁定怎么办魅族 魅蓝u10触屏没反应怎么办 魅蓝e2手机锁定怎么办 苹果手机声音键坏了怎么办 一加6的屏幕问题怎么办 魅蓝note6卡顿怎么办 苹果4s内屏坏了怎么办 魅族mx6一直重启怎么办 魅族充电慢了怎么办啊 笔记本玩游戏掉帧怎么办 psv玩游戏掉帧怎么办 ipad玩游戏掉帧怎么办 手机玩游戏严重掉帧怎么办 苹果7p掉电快怎么办 努比亚z11手机总是开关机怎么办 努比亚手机不能保存图片怎么办 小米8拍照和努比亚怎么办 oppor7手机开不了机怎么办 vivox5m手机开不开机怎么办 步步高x7图案解锁忘记怎么办 手机机锁定怎么办魅族 衣服买完降价了怎么办 在淘宝上不发货怎么办