C语言十大经典实例编程 下载本文

a[j]='.';j++; 将数字结束符“.”拷贝到a数组依然保持结束标记 }

if(e[i]=='(') 如果字符是“(”时 top=push2(top,e[i]); 将其压入堆栈 if(e[i]==')') 如果字符是“)”时 { top=ptop2(top,&w); 取出栈顶元素,并从栈顶删除该元素 while(w!='(') 如果字符不是“(”时反复循环 { a[j]=w; 将栈顶元素存入a数组 j++; 下标加1 top=ptop2(top,&w) ; 取出栈顶元素,并从栈顶删除该元素 } }

if(e[i]=='+'||e[i]=='-') 如果字符是加或减号时 { if(!empty2(top)) 如栈不为空 { w=topx2(top); while(w!='(') 当栈顶元素不是“(”时反复循环 { a[j]=w; j++; 将栈顶元素存入表达式a中,a的下标加1 top=pop2(top); 删除栈顶元素 if(empty2(top)) 如果栈为空 break; 跳出循环 else w=topx2(top); 否则读栈顶元素 } }

top=push2(top,e[i]); 将当前e的字符元素压入堆栈 }

if(e[i]==''||e[i]=='') 如果字符是乘或除号时 { if(!empty2(top)) 如栈不为空 { w=topx2(top); 读栈顶元素存入w while(w==''||w=='')当栈顶元素是乘或除时反复循环 { a[j]=w; j++; 将栈顶元素存入字符串a中,a的下标加1 top=pop2(top); 删除栈顶元素 if(empty2(top)) 如果栈为空 break; 跳出循环

else w=topx2(top); 否则读栈顶元素 } } top=push2(top,e[i]); 将当前e字符元素压入堆栈 }

i++; e的下标加1 }

while(!empty2(top)) 当不为空时反复循环

top=ptop2(top,&a[j++]); 将栈顶元素存入数组a中

a[j]='\\0'; 将字符串结束标记写入最后一个数组元素中构成字符串 }

int computer(char s) 计算函数 {

STACK1 top=NULL;

int i,k,num1,num2,result; i=0;

while(s[i]!='\\0') 当字符串没有结束时作以下处理 {

if(isdigit(s[i])) 判字符是否为数字 { k=0; k初值为0 do{ k=10k+s[i]-'0'; 将字符连接为十进制数字 i++; i加1 }while(s[i]!='.'); 当字符不为‘.’时重复循环 top=push(top,k); 将生成的数字压入堆栈 }

if(s[i]=='+') 如果为'+'号 { top=ptop(top,&num2); 将栈顶元素取出存入num2中 top=ptop(top,&num1); 将栈顶元素取出存入num1中 result=num2+num1; 将num1和num2相加存入result中 top=push(top,result); 将result压入堆栈 }

if(s[i]=='-') 如果为'-'号 { top=ptop(top,&num2); 将栈顶元素取出存入num2中 top=ptop(top,&num1); 将栈顶元素取出存入num1中 result=num1-num2; 将num1减去num2结果存入result中 top=push(top,result); 将result压入堆栈 }

if(s[i]=='') 如果为''号 {

top=ptop(top,&num2); 将栈顶元素取出存入num2中 top=ptop(top,&num1); 将栈顶元素取出存入num1中 result=num1num2; 将num1与num2相乘结果存入result中 top=push(top,result); 将result压入堆栈 }

if(s[i]=='') 如果为''号 { top=ptop(top,&num2); 将栈顶元素取出存入num2中 top=ptop(top,&num1); 将栈顶元素取出存入num1中 result=num1num2; 将num1除num2结果存入result中 top=push(top,result); 将result压入堆栈 }

i++; i加1 }

top=ptop(top,&result); 最后栈顶元素的值为计算的结果 return result; 返回结果 }

STACK1 initstack1(STACK1 top) 初始化 {

top=NULL; 栈顶指针置为空 return top; 返回栈顶指针 }

STACK1 push(STACK1 top,int x) 入栈函数 {

STACK1 p; 临时指针类型为STACK1

p=(STACK1 )malloc(sizeof(STACK1)); 申请STACK1大小的空间 if(p==NULL) 如果p为空 {

printf(\显示内存溢出 exit(0); 退出 }

p->data=x; 保存值x到新空间

p->link=top; 新结点的后继为当前栈顶指针 top=p; 新的栈顶指针为新插入的结点 return top; 返回栈顶指针 }

STACK1 pop(STACK1 top) 出栈 {

STACK1 q; 定义临时变量 q=top; 保存当前栈顶指针 top=top->link; 栈顶指针后移 free(q); 释放q

return top; 返回栈顶指针 }

int topx(STACK1 top) 读栈顶元素 {

if(top==NULL) 栈是否为空 {

printf(\显示栈为空信息 return 0; 返回整数0 }

return top->data; 返回栈顶元素 }

STACK1 ptop(STACK1 top,int x) 取栈顶元素,并删除栈顶元素 {

x=topx(top); 读栈顶元素 top=pop(top); 删除栈顶元素 return top; 返回栈顶指针 }

int empty(STACK1 top) 判栈是否为空 {

if(top==NULL) 如果为空 return 1; 返回1 else

return 0; 否则返回0 }

STACK2 initstack2(STACK2 top) 初始化 {

top=NULL; 栈顶指针置为空 return top; 返回栈顶指针 }

STACK2 push2(STACK2 top,char x) 入栈函数 {

STACK2 p; 临时指针类型为STACK2

p=(STACK2 )malloc(sizeof(STACK2)); 申请STACK2大小的空间 if(p==NULL) 如果p为空 {

printf(\显示内存溢出 exit(0); 退出 }

p->data=x; 保存值x到新空间

p->link=top; 新结点的后继为当前栈顶指针 top=p; 新的栈顶指针为新插入的结点 return top; 返回栈顶指针 }

STACK2 pop2(STACK2 top) 出栈 {

STACK2 q; 定义临时变量