c语言栈算法,c语言函数栈

本文目录一览:

C语言计算栈

#include stdio.h

double readnumber(char a[],int *i)//将数字字符转变成相应的数

{

double x=0.0;

int k=0;

while(a[*i]=’0’a[*i]=’9′)

{

x=x*10+a[*i]-‘0’;

(*i)++;

}

if(a[*i]==’.’)

{

(*i)++;

while(a[*i]=’0’a[*i]=’9′)

{

x=x*10+a[*i]-‘0’;

(*i)++;

k++;

}

}

while(k!=0)

{

x=x/10.0;

k=k-1;

}

return x;

}

double yunsuan(char a[])//求一个后缀表达式的值

{

double obst[100],b,c;//操作数栈

int top=0,i=0;

while(a[i]!=’\0′)

{

if(a[i]=’0’a[i]=’9′)

obst[top++]=readnumber(a,i);

else if(a[i]==’ ‘) i++;

else if(a[i]==’+’)

{

b=obst[–top];

c=obst[–top];

obst[top++]=b+c;

i++;

}

else if(a[i]==’-‘)

{

b=obst[–top];

c=obst[–top];

obst[top++]=c-b;

i++;

}

else if(a[i]==’*’)

{

b=obst[–top];

c=obst[–top];

obst[top++]=b*c;

i++;

}

else if(a[i]==’/’)

{

b=obst[–top];

c=obst[–top];

obst[top++]=c/b;

i++;

}

}

return obst[0];

}

int pd(char op)//判断一个字符是不是运算符

{

switch(op)

{

case ‘+’:

case ‘-‘:

case ‘*’:

case ‘/’:return 1;

default :return 0;

}

}

int priority(char op)//求运算符的优先级

{

switch(op)

{

case ‘\0’:return -1;

case ‘(‘:return 0;

case ‘+’:

case ‘-‘:return 1;

case ‘*’:

case ‘/’:return 2;

default:return -1;

}

}

void charge(char a[],char b[])//将中缀表达式转换等价的后缀表达式

{

int i=0,j=0;

char opst[100];

int top,t;

top=0;

opst[top]=’\0′;

top++;

while(a[i]!=’\0′)

{

if(a[i]=’0’a[i]=’9’||a[i]==’.’)

b[j++]=a[i];//遇到数字和小数点直接写入后缀表达式

else if(a[i]=='(‘)//遇到左括号进入操作符栈

{

opst[top]=a[i];

top++;

}

else if(a[i]==’)’)

{

t=top-1;

while(opst[t]!='(‘)

{//'(‘之前出栈

b[j++]=opst[–top];

t=top-1;

}

top–;

}

else if(pd(a[i]))//’+’,’-‘,’*’,’/’

{

b[j++]=’ ‘;//用空格分开两个操作数

while(priority(opst[top-1])=priority(a[i]))

b[j++]=opst[–top];

opst[top]=a[i];

top++;

}

i++;

}

while(top) b[j++]=opst[–top];

}

int main()

{

char a[100],b[100];

double jieguo;

printf(“\n\t请输入算术表达式:”);

scanf(“%s”,a);

charge(a,b);

jieguo=yunsuan(b);

printf(“\t表达式运算的结果为:%lf”,jieguo);

return 0;

}

栈的操作算法c语言实现

#includeiostream

using namespace std;

#define STACK_INIT_SIZE 100

#define STACKINCREASE 1ypedef struct{

int *base;

int *top;

int stacksize;

}SqStack;

int InitStack (SqStack S)//构造空栈

{

S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));

if(!S.base)exit(OVERFLOW);//存储分配失败

S.top=S.base;

return 0;

}

int Push(SqStack S,int e)//插入新的元素为新的栈顶元素

{

if(S.top-S.base=S.stacksize)//z栈满,追加存储空间

{

S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREASE)*sizeof(int));

if(!S.base)exit(OVERFLOW);//存储失败

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREASE;

}

*S.top++ =e;//认为是先赋值再加加?

return 0;

}

void Insert(SqStack S,int e)

{

int *p;

int temp;

p=S.base;

if(S.top-S.base=S.stacksize)//z栈满,追加存储空间

{

S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREASE)*sizeof(int));

if(!S.base)exit(OVERFLOW);//存储失败

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREASE;

}

while(*p=e)

p++;

while(pS.top)

{

temp=*p;

*p=e;

e=temp;

p++;

}

}0

void Pop(SqStack S)

{

if(S.base==S.top)

cout”该栈是空栈”endl;

while(S.baseS.top)

{

cout*++S.base” “;

}

}

void main()

{

SqStack S;

int j,i;

InitStack(S);

for(i=1;i=5;i++)

{

cout”请输入”i”个栈内元素”endl;

cinj;

Push(S,j);

}

Pop(S);

cout”请输入你要插入的元素”endl;

cinj;

Insert(S,j);

cout”输出栈内元素”endl;

Pop(S);

}

c语言 C语言 双向栈 算法

#include stdio.h

#include stdlib.h

#include conio.h

#define MaxSize 1024

typedef struct stack {

int data[MaxSize];

int lp; // 左指针

int rp; // 右指针

}*STACK;

/*

栈指针总是指向待压入位置。初始时,(0#栈)左指针lp指向data[0],即lp == 0;

(1#栈)右指针rp指向data[MaxSize – 1],即rp == MaxSize – 1。当lp == rp时,

还有一个存储单元可用,所以栈满的条件是lp  rp。

*/

STACK InitStack() { // 置空双向栈

STACK S = (STACK)malloc(sizeof(struct stack));

S-lp = 0;

S-rp = MaxSize – 1;

return S;

}

int Full(STACK S) { // 判断是否满了

return S-lp  S-rp;

}

int Empty(STACK S, int number) { // 判断number栈是否为空

if(number  0 || number  1) {

printf(“不存在 #%d 栈。\n”,number);

return 1;

}

if(number) return (S-rp  MaxSize – 1); // 右栈

return S-lp  1; // 左栈

}

int Push(STACK S,int number,int e) { // 入栈

if(number  0 || number  1) {

printf(“不存在 #%d 栈。\n”,number);

return 0;

}

if(Full(S)) {

printf(“栈已满。\n”);

return 0;

}

if(number) S-data[S-rp–] = e;

else S-data[S-lp++] = e;

return 1;

}

 

int Pop(STACK S,int number,int *e) { // 出栈

if(number  0 || number  1) {

printf(“不存在 #%d 栈。\n”,number);

return 0;

}

if(Empty(S,number)) {

printf(“#%d 空栈已空。\n”,number);

return 0;

}

if(number == 0) *e = S-data[–S-lp];

else *e = S-data[++S-rp];

return 1;

}

原创文章,作者:ZUEP,如若转载,请注明出处:https://www.506064.com/n/147419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZUEPZUEP
上一篇 2024-11-01 14:09
下一篇 2024-11-01 14:09

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python实现爬楼梯算法

    本文介绍使用Python实现爬楼梯算法,该算法用于计算一个人爬n级楼梯有多少种不同的方法。 有一楼梯,小明可以一次走一步、两步或三步。请问小明爬上第 n 级楼梯有多少种不同的爬楼梯…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29

发表回复

登录后才能评论