实验名称:栈和队列的应用
一、实验目的及要求
1. 熟练掌握栈和队列的结构,以及这两种数据结构的特点;
2. 能够在两种存储结构上实现栈的基本运算,特别注意栈满栈空的判断条件和描述方法;
3. 熟练掌握链队列和循环队列的基本运算,特别注意队列满和队列空的判断条件和描述方法。
二、实验内容
1. 写出顺序栈的出栈和取栈顶元素运算的算法设计。
2. 写出链队列的出队和取队头元素运算的算法设计。
三、实验设备及环境
安装C语言编译环境。
四、实验步骤(功能实现的核心代码及说明,包括数据库表)
1、顺序栈出栈程序编写
char Pop(SegStack*S
{char x;
if (StackEmpty(S))
printf("Stack underflow"),
else
{x=S->data[S->top]
S->top--;
return x;
}
}
顺序栈取栈程序编写
char StackTop( SeqStack *S
{if (StackEmpty(S))
printf("Stack is empty"),
else
return S->data[S->top];
}
2、链队列的出队程序编写
char Pop(StackNode **top)
{char x;
StackNode *p=*top;
if (StackEmpty(*top))
printf("Stack underflow")
x=(*top)->data;
*top=p->next;
free(p);
return X;
}
链队列的取队程序编写
char StackTop(StackNode *top)
{char x;
if (StackEmpty(top))
printf("Stack is empty ")
x=(*top)->data:
return x;
}
五、实验结果(程序运行结果等,可附截图)
1、顺序栈的出栈和取栈核心算法
//如果栈空,不能出栈。
//如果栈未空,可以出栈。
//保存栈顶结点数据。
//top下移一个位置。
//返回某变量的值。
2、链队列的出队和取队头核心算法
//保存栈顶指针
//如果栈为空,不能出栈。
//如果栈非空,可以出栈。
//保存栈顶结点数据。
//将栈顶指针下移
//释放原栈顶结点。
//返回出栈的数据。
六、实验小结
本次栈和队列的应用实验,通过实际案例验证了两种数据结构的特性与适用场景。栈因 “先进后出” 特性,在括号匹配实验中,左括号入栈、右括号与栈顶匹配出栈,高效解决嵌套括号合法性判断;表达式求值实验中,数字入栈、运算符触发栈顶元素运算,清晰体现其回溯处理优势。实验也发现初期未完善栈空弹出、队列满入队的异常处理,后续通过添加判断语句优化代码。此次实验让我明确,需根据问题特性选择数据结构,为后续算法设计积累了实践经验。
请先
!