c0deWord格式文档下载.docx
- 文档编号:46161
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:18
- 大小:18.45KB
c0deWord格式文档下载.docx
《c0deWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《c0deWord格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。
StatusInitStack(SqStack&
S)
{
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!
S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
StatusGetTop(SqStackS,SElemType&
e){
if(S.top==S.base)returnERROR;
e=*(S.top-1);
StatusPush(SqStack&
S,SElemTypee){
if(S.top-S.base>
=S.stacksize){
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
*S.top++=e;
StatusPop(SqStack&
S,SElemType&
e=*--S.top;
intmain(){
SqStacks;
InitStack(s);
inta,i;
SElemTypee=0;
while
(1){
i=0;
这有三种操作:
[0]入栈[1]获取栈顶元素[2]出栈\n"
);
\n请选择想要进行的操作:
"
scanf_s("
%d"
&
a);
switch(a){
case0:
i=1;
printf("
请输入PUSH的元素:
scanf_s("
e);
Push(s,e);
break;
case1:
//if(i==0){printf("
栈里还没有元素\n"
break;
GetTop(s,e);
printf("
TOP:
%d\n"
e);
break;
case2:
POP:
Pop(s,e);
}
------------------------------------
#defineSTACK_INIT_SIZE100//定义最初申请的内存的大小]
#defineSTACKINCREMENT10//存储空间分配增量
/*Init*/
S){//构造一个空栈S
//栈底指针S.base指向新分配的STACK_INIT_SIZE个SElemType大小的空间
(S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))))
exit(OVERFLOW);
//存储分配失败
//初始栈容量
/*GetTop*/
if(S.top>
S.base){
e=*(S.top-1);
//因为S.top指向栈顶元素的下一个位置
returnOK;
//所以栈顶元素就是e=*(S.top-1)
else
returnERROR;
/*Push*/
=S.stacksize){//栈满,追加存储空间
S.base=(SElemType*)realloc(S.base,//原栈底指针
(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
//新大小
S.base)
exit(OVERFLOW);
//存储分配失败
*(S.top)++=e;
//先把e压入栈顶,S.top再增1指向栈顶元素e的下一个位置
/*Pop*/
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;
否则返回ERROR
if(S.top==S.base)//如果空栈,报错
//S.top先减1指向栈顶元素,再取值,交给e带回
/*Judge*/
intIn(charc){//判断C是否是操作符
switch(c){
case'
+'
:
-'
*'
/'
('
)'
#'
returnOK;
break;
default:
returnERROR;
/*Precede*/
charPrecede(chart1,chart2){//判断两个运算符的优先级
charf;
switch(t2){
case'
if(t1=='
||t1=='
)
f='
<
'
;
else
f='
>
if(t1=='
ERROR\n"
exit(ERROR);
switch(t1)
f='
='
printf("
f='
switch(t1){
returnf;
/*Operate*/
intOperate(inta,inttheta,intb){
intc;
a=a-48;
b=b-48;
switch(theta)
c=a+b+48;
c=a-b+48;
c=a*b+48;
c=a/b+48;
return0;
returnc;
/*Main*/
SElemTypeEvaluateExpression(){//算法3.4
//算术表达式求值的算符优先算法。
设OPTR和OPND分别为运算符栈和运算数栈
SqStackOPTR,OPND;
inta,b,c,x,theta;
InitStack(OPTR);
//构造空栈OPTR,准备装运算符
Push(OPTR,'
//栈OPTR的栈底元素是#
InitStack(OPND);
//构造空栈OPND,准备装操作数
c=getchar();
GetTop(OPTR,x);
//取OPTR的栈顶元素交给x
while(c!
='
||x!
){
if(In(c))
switch(Precede(x,c)){//比较栈顶元素x、输入字符c的优先权
case'
Push(OPTR,c);
//输入字符c入运算符栈OPTR
c=getchar();
Pop(OPTR,x);
//栈OPTR的栈顶元素出栈,赋给栈顶元素x
Pop(OPTR,theta);
//栈顶元素x出运算符栈OPTR,赋给theta
Pop(OPND,b);
//操作数出操作数栈OPND,赋给b
Pop(OPND,a);
//操作数出操作数栈OPND,赋给a
Push(OPND,Operate(a,theta,b));
//运算结果Operate(a,theta,b)入操作数栈OPND
}
elseif(c>
0'
&
&
c<
9'
){//如果c是操作数
Push(OPND,c);
c=getchar();
else{//如果c是非法字符
exit(ERROR);
GetTop(OPTR,x);
}//循环结束时,操作数栈OPND的栈顶元素是运算结果
GetTop(OPND,x);
//取操作数栈OPND的栈顶元素赋给x
returnx;
printf("
请输入表达式,以#结束\n"
%c\n"
EvaluateExpression());
//求值
system("
pause"
------------------------------------
typedefintQElemType;
typedefstructQNode{
QElemTypedata;
structQNode*next;
}QNode,*QueuePtr;
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
StatusDestroyQueue(LinkQueue&
Q){
while(Q.front){
Q.rear=Q.front->
next;
free(Q.front);
Q.front=Q.rear;
StatusDispQueue(LinkQueue&
QueuePtri=Q.front;
while(i!
=Q.rear){
i=i->
%d"
i->
data);
StatusEnQueue(LinkQueue&
Q,QElemTypee){
QueuePtrp=(QueuePtr)malloc(sizeof(QNode));
p)exit(OVERFLOW);
p->
data=e;
next=NULL;
Q.rear->
next=p;
Q.rear=p;
StatusDeQueue(LinkQueue&
Q,QElemType&
if(Q.front==Q.rear)returnERROR;
QueuePtrp=Q.front->
e=p->
data;
Q.front->
next=p->
if(Q.rear==p)Q.rear=Q.front;
free(p);
StatusInitQueue(LinkQueue&
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
Q.front)exit(OVERFLOW);
LinkQueuelq;
InitQueue(lq);
inta;
QElemTypee;
\n这有四种操作:
[0]销毁[1]插入[2]删除[3]显示\n"
\n请输入需要的操作:
switch(a)
{
DestroyQueue(lq);
已成功销毁队列\n再按任意键退出\n"
getchar();
exit(0);
请输入插入的元素:
EnQueue(lq,e);
DispQueue(lq);
DeQueue(lq,e);
case3:
Display:
}#include<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c0de