一、实验目的及要求
1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们。
本实验训练的要点是“栈”和“队列”的观点;
二、实验内容
1) 利用栈,实现数制转换。
2) 利用栈,实现任一个表达式中的语法检查(选做)。
3) 编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);
三、实验流程、操作步骤或核心代码、算法片段
顺序栈:
Status InitStack(SqStack &S)
{
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base)
return ERROR;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestoryStack(SqStack &S)
{
free(S.base);
return OK;
}
Status ClearStack(SqStack &S)
{
S.top=S.base;
return OK;
}
Status StackEmpty(SqStack S)
{
if(S.base==S.top)
return OK;
return ERROR;
}
int StackLength(SqStack S)
{
return S.top-S.base;
}
Status GetTop(SqStack S,ElemType &e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!S.base) return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Push(SqStack &S,ElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!S.base)
return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,ElemType &e)
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}
Status StackTraverse(SqStack S)
{
ElemType *p;
p=(ElemType *)malloc(sizeof(ElemType));
if(!p) return ERROR;
p=S.top;
while(p!=S.base)//S.top上面一个...
{
p--;
printf("%d ",*p);
}
return OK;
}
Status Compare(SqStack &S)
{
int flag,TURE=OK,FALSE=ERROR;
ElemType e,x;
InitStack(S);
flag=OK;
printf("请输入要进栈或出栈的元素:");
while((x= getchar())!='#'&&flag)
{
switch (x)
{
case '(':
case '[':
case '{':
if(Push(S,x)==OK)
printf("括号匹配成功!\n\n");
break;
case ')':
if(Pop(S,e)==ERROR || e!='(')
{
printf("没有满足条件\n");
flag=FALSE;
}
break;
case ']':
if ( Pop(S,e)==ERROR || e!='[')
flag=FALSE;
break;
case '}':
if ( Pop(S,e)==ERROR || e!='{')
flag=FALSE;
break;
}
}
if (flag && x=='#' && StackEmpty(S))
return OK;
else
return ERROR;
}
链队列:
Status InitQueue(LinkQueue &Q)
{
Q.front =Q.rear=
(QueuePtr)malloc(sizeof(QNode));
if (!Q.front) return ERROR;
Q.front->next = NULL;
return OK;
}
Status DestoryQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return OK;
}
Status QueueEmpty(LinkQueue &Q)
{
if(Q.front->next==NULL)
return OK;
return ERROR;
}
Status QueueLength(LinkQueue Q)
{
int i=0;
QueuePtr p,q;
p=Q.front;
while(p->next)
{
i++;
p=Q.front;
q=p->next;
p=q;
}
return i;
}
Status GetHead(LinkQueue Q,ElemType &e)
{
QueuePtr p;
p=Q.front->next;
if(!p)
return ERROR;
e=p->data;
return e;
}
Status ClearQueue(LinkQueue &Q)
{
QueuePtr p;
while(Q.front->next )
{
p=Q.front->next;
free(Q.front);
Q.front=p;
}
Q.front->next=NULL;
Q.rear->next=NULL;
return OK;
}
Status EnQueue(LinkQueue &Q,ElemType e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof (QNode));
if(!p)
return ERROR;
p->data=e;
p->next=NULL;
Q.rear->next = p;
Q.rear=p; //p->next 为空
return OK;
河南高考排名243480左右排位理科可以上哪些大学,具体能上什么大学
广西高考排名212400左右排位理科可以上哪些大学,具体能上什么大学
广东高考排名85850左右排位物理可以上哪些大学,具体能上什么大学
陕西高考排名150120左右排位理科可以上哪些大学,具体能上什么大学
福建高考排名3220左右排位历史可以上哪些大学,具体能上什么大学
河北高考排名114880左右排位物理可以上哪些大学,具体能上什么大学
半年个人工作计划四篇
医院座谈会领导讲话稿范文(精选7篇)
阅览室工作计划十五篇)
食品加工企业自查报告范文
食品加工企业自查报告范文
幼儿园员工辞职报告
暑期社会实践体会:难忘永嘉情
工程技术部述职报告
在幼儿园的暑假工作实践报告范文
大学生消费状况调查报告模板
重庆高考排名14250左右排位历史可以上哪些大学,具体能上什么大学
河北高考排名141780左右排位历史可以上哪些大学,具体能上什么大学
贵州高考排名122910左右排位文科可以上哪些大学,具体能上什么大学
河南高考排名13840左右排位文科可以上哪些大学,具体能上什么大学
四川电影电视学院和沈阳大学哪个好 附对比和区别排名
考浙江东方职业技术学院要多少分山西考生 附2024录取名次和最低分
云南高考排名44990左右排位理科可以上哪些大学,具体能上什么大学
黑龙江高考排名95680左右排位理科可以上哪些大学,具体能上什么大学
安徽高考排名91690左右排位理科可以上哪些大学,具体能上什么大学
岳阳职业技术学院的医学检验技术专业排名怎么样 附历年录戎数线
文山学院和韶关学院哪个好 附对比和区别排名
海南高考排名4000左右排位综合可以上哪些大学,具体能上什么大学
沈阳科技学院和广州软件学院哪个好 附对比和区别排名
重庆交通大学的能源与动力工程专业排名怎么样 附历年录戎数线
山东高考排名438500左右排位综合可以上哪些大学,具体能上什么大学
广东高考排名49880左右排位物理可以上哪些大学,具体能上什么大学
辽宁财贸学院和新疆农业大学哪个好 附对比和区别排名
青海高考排名16830左右排位理科可以上哪些大学,具体能上什么大学
广东高考排名224680左右排位物理可以上哪些大学,具体能上什么大学
皖西学院和山西中医药大学哪个好 附对比和区别排名
语文教师学期述职报告范文
语言类实习报告汇总六篇
关于美丽家乡的社会实践报告
客服主管岗位竞聘报告(客服主管岗位竞聘报告优秀范文)
物流公司员工年终述职报告
大四毕业生社会实践报告
车间主任年终报告精选十五篇)
关于旅游的实习报告范文五篇
酒吧辞职报告
国税局公务员辞职报告范文
关于家乡环境的实践调查报告
银行职工述职报告
关于优秀的教师的述职报告范文(精选六篇)
简短辞职报告精选十五篇)
公司融资经理述职报告