数据结构之求后缀表达式
程序员文章站
2022-06-09 12:58:32
...
顺序栈的简单例子
基础:顺序栈。
本文编译环境:Dev c++ 5.4.0
语言:c
序言:对栈的操作说清楚,当然应该写个小项目。这里要求比较多,数字在0—9,操作符只有+,-,*,/。这四个。
#include<stdio.h>
#include<stdlib.h>
#define MAXLEN 100
#define datatype char
//结构体的建立
typedef struct
{
datatype data[MAXLEN];//数据存储
int top;//栈顶指针
}Seqlist;//名字
//顺序栈创建
Seqlist *Createlist()
{
Seqlist *Lq;//定义栈顶指针
Lq=(Seqlist *)malloc(sizeof(Seqlist));//给栈顶指针分配空间
Lq->top=-1;//栈初始化为-1
return Lq;//返回栈顶指针
}
//进栈
int Judg(Seqlist *Lq);//声明一下调用
int Push(Seqlist *Lq,datatype i)//引入头指针和要进栈元素
{
if(Judg(Lq)==0) printf("Wrong!!! push!!!");//输出错误提示
else
{
Lq->top++;//栈顶指针加一
Lq->data[Lq->top]=i;//赋值
}
}
//出栈并读顶
int Popr(Seqlist *Lq,datatype *i)//引入栈顶指针和要输出的栈顶数据
{
if(Judg(Lq)==-1) printf("Wrong!!! pop!!!");//输出错误提示
else
{
*i=Lq->data[Lq->top];//通过地址赋值,读顶
Lq->top--;//栈顶指针减一
}
}
//单独读顶
int Pop(Seqlist *Lq)//引入栈顶指针和要输出的栈顶数据
{
Lq->data[Lq->top];//通过地址赋值,读顶
}
//判断
int Judg(Seqlist *Lq)//引入栈顶指针
{
if(MAXLEN-1==Lq->top) return 0;//栈满
else if(Lq->top==-1) return -1;//栈空
else return 1;//栈其他正常情况
}
//显示
void Looklist(Seqlist *Lq)//引入栈顶指针
{
int i;
for(i=Lq->top;i>=0;i--)
{
printf("%c",Lq->data[i]);//输出
}
}
int main()
{
char m[20];
int i=0,j;
while(i<20)
{
scanf("%c",&m[i]);//输入
if(m[i]=='#') break;//结束标志
i++;
}
Seqlist *Lq;
Lq=Createlist();//创建栈顶指针
for(j=0;j<=i;j++)
{
if(m[j]>='0'&&m[j]<='9') printf("%c",m[j]);//遇到数字直接输出
else if(m[j]=='#') //遇到结束符
{
Looklist(Lq);//全部输出,并结束
break;
}
else
{
if(Lq->top!=0&&(Pop(Lq)=='/'||Pop(Lq)=='*')&&
(m[j]=='+'||m[j]=='-'))//后进的不高于先进的优先级
{
Looklist(Lq);//全部输出
Lq->top=-1;//重置
Push(Lq,m[j]);//再进栈
}
else
{
Push(Lq,m[j]);//正常进栈
}
}
}
return 0;
}
结果:
这些代码都是跑过的,建议大家还是自己亲手敲一遍加深印象,作者这里也是一字一字敲出来的,要避免眼高手低。
本章的内容有误或者不懂的地方,大家可以私信我,我也会第一时间回复大家的,差不多暑假两个月,复习下这些基本知识,其他的问题也可以问我,就算我不知道的,在能力范围之内的一定竭尽全力为你们解答。我的QQ:932824098.
上一篇: 含b族维生素的食物有什么呢
下一篇: BuyBook案例(List集合)