博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
下推栈 中缀-后缀表达式转换 后缀表达式求值 数组与链表实现
阅读量:4963 次
发布时间:2019-06-12

本文共 4539 字,大约阅读时间需要 15 分钟。

Item.h   (自定义类型) :

1 typedef double Item;

STACK.h   (下推栈接口) :

 

1 #include "Item.h"2 3 bool STACKerror(int i);4 void STACKinit(int);5 int STACKempty(void);6 void STACKpush(Item);7 Item STACKpop(void);

 

STACK.c   (接口源代码_数组实现) :

1 #include "STACK.h" 2 #include 
3 4 static Item *s; 5 static int N,N1; 6 7 bool STACKerror(int i) 8 { 9 if(i)10 return N
0 ?true:false;14 }15 void STACKinit(int maxN)16 {17 s=malloc(maxN*sizeof(Item));18 N=0;19 N1=maxN;20 }21 int STACKempty(void)22 {23 return N;24 }25 void STACKpush(Item item)26 {27 if(STACKerror(1))28 s[N++]=item;29 else30 printf("\nSTACKpush false");31 }32 Item STACKpop(void)33 {34 if(STACKerror(0))35 return s[--N];36 else37 printf("\nSTACKpop false");38 return -1;39 }

STACK.c   (接口源代码_链表实现) :

1 #include "STACK.h" 2 #include 
3 4 typedef struct STACKnode *link; 5 struct STACKnode 6 { 7 Item item; 8 link next; 9 };10 11 static link head;12 static int N=0,N1;13 14 bool STACKerror(int i)15 {16 if(i)17 return N
0 ?true:false;21 }22 link NEW(Item item, link next)23 {24 link x = malloc(sizeof *x);25 x->item=item; x->next=next;26 return x;27 }28 void STACKinit(int maxN)29 {30 N1=maxN;31 head=NULL;32 }33 int STACKempty(void)34 {35 return N;36 }37 void STACKpush(Item item)38 {39 if(STACKerror(1))40 {41 head=NEW(item, head);42 N++;43 }44 else45 printf("\nSTACKpush false");46 }47 Item STACKpop(void)48 {49 if(STACKerror(0))50 {51 Item item=head->item;52 link t=head->next;53 free(head);head=t;54 N--;55 return item;56 }57 else58 printf("\nSTACKpop false");59 return -1;60 }

STACK.c   (接口源代码_双向链表实现) :

1 #include
2 #include "STACK.h" 3 4 typedef struct node * link; 5 struct node 6 { 7 Item item; 8 link next,last; 9 };10 11 static link head,last;12 static int N=0,N1=0;13 14 link NEW(Item item, link last)15 {16 link x=malloc(sizeof (link));17 x->item=item;18 //x->next=head;19 x->next=NULL;20 x->last=last;21 return x;22 }23 static short STACKerror(short i)24 {25 if(i)26 {27 if(N
0)35 return 1;36 printf("\nSTACKpop false !\n");37 exit(1);38 }39 }40 void STACKinit(int maxN)41 {42 last=head=NULL;43 N1=maxN;44 }45 void STACKpush(Item item)46 {47 if(STACKerror(1))48 {49 head=NEW(item, last);50 last=head;51 N++;52 }53 }54 Item STACKpop(void)55 {56 if(STACKerror(0))57 {58 Item i=head->item;59 link x=head;60 head=head->last;61 last=head;62 free(x);63 N--;64 return i;65 }66 }67 int STACKempty(void)68 {69 return N;70 }

 

main.c   (主程序_打印中缀-后缀表达式) :

1 #include 
2 #include
3 #include "STACK.h" 4 5 int main(void) 6 { 7 char a[20]; 8 double temp; 9 10 scanf("%s",a);11 getchar();12 13 int N=strlen(a);14 STACKinit(N);15 16 for(int i=0; i
='0')&&(a[i]<='9'))27 {28 printf("%c ",a[i]);29 }30 }31 putchar('\n');32 33 return 0;34 }

 

测试结果:

main.c   (主程序_后缀表达式求值) :

1 #include 
2 #include
3 #include "STACK.h" 4 5 int main(void) 6 { 7 char a[20]; 8 double temp; 9 10 scanf("%s",a);11 getchar();12 13 int N=strlen(a);14 STACKinit(N);15 for(int i=0; i
='0')&&(a[i]<='9'))18 STACKpush(a[i]-'0');19 else if(a[i]=='+')20 {21 //STACKpush(STACKpop()+STACKpop());22 temp=STACKpop();23 STACKpush(STACKpop()+temp); 24 }25 else if(a[i]=='*')26 {27 //STACKpush(STACKpop()*STACKpop());28 temp=STACKpop();29 STACKpush(STACKpop()*temp);30 }31 else if(a[i]=='/')32 {33 temp=STACKpop();34 STACKpush(STACKpop()/temp);35 }36 else if(a[i]=='-')37 {38 temp=STACKpop();39 STACKpush(STACKpop()-temp);40 }41 //while((a[i]>='0')&&(a[i]<='9'))42 //STACKpush(10*STACKpop()+(a[i++]-'0'));43 }44 printf("%f \n", STACKpop());45 return 0;46 }

测试结果:

 

转载于:https://www.cnblogs.com/WALLACE-S-BOOK/p/8633855.html

你可能感兴趣的文章
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>
1Caesar加密
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java语法之final
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>