欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构之求后缀表达式

程序员文章站 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.


相关标签: 案例