}
int main() {
int selectnum;
LinkList *head = NULL;
head = createLinkList(head); while(1) { selectnum = menu(); switch(selectnum) { case 1: { inputData(head); break; } case 2: { searchScore(head); break; } case 3: { modifyScore(head); break; } case 4: { outputData(head); break; } case 5: { remove(head); break; } case 6: { count(head); break; } case 7: {
}
}
}
average(head); break; }
case 8: { exitSys(); break; }
5.实验结果:
实验总结:
单链表相对于顺序链表,插入和删除更加方便,而且不需要考虑存储空间的大小
问题,但是频繁的读取和数据的查找不甚便捷。
软件学院上机实验报告
备注:学生应根据实验的要求,设计一个实验过程(包括程序代码、各种定义说明),并根据实验的结论及实验过程中出现的情况(错误、异常等)得出的体会。要求学生每人一台计算机,独立完成实验的全过程。
实验题目: 栈的应用 实验目的: 1.了解栈的性质
2.掌握栈的顺存储结构 3.掌握栈的实际应用
4.学会使用递归方式编程 实验要求: 1.栈的抽象数据类型 2.举一个栈的后进先出的例子 3.顺序栈的定义
4.顺序栈基本操作的实现 5.栈的应用 6.递归的使用 7.实验结果 实验内容:
1. 栈的抽象数据类型
ADT 栈(stack) Data 同线性表,元素具有相同的类型,是相邻元素具有前驱和后继关系。 Operation InitStack(*S):初始化操作,建立一个空栈S。 DestroyStack(*S):若栈存在,则销毁它。 ClearStack(*S):将栈清空。 StackEmpty(S):若栈为空,返回ture,否则返回false。 GetTop(S,*e):若栈存在且非空,用e返回S的栈顶元素。 Push(*S,e):若栈S存在,插入新元素e到栈S中并成为栈顶元素。 Pop(*S,*e):删除栈S中栈顶元素,并用e返回其值。 StackLength(S):返回栈S的元素个数。 endADT 2. 举一个栈的后进先出的例子
例如弹夹式手枪,子弹先填装,后出来;后填装,先出来。
3. 顺序栈的定义
Typedef int SElemType; /*SElemType 类型根据实际情况而定,这里假设为int*/ {
SElemType data[MAXSIZE];
Int top; /*用于栈顶指针*/ }SqStack;
4. 顺序栈基本操作的实现
1) 对于进展操作Push,其代码如下:
/*插入元素e为新的栈顶元素*/
Status Push(SqStack *S, SElemType e) {
If(S->top==MAXSIZE-1) /*栈满*/ {
return ERROR; }
S->top++; /*栈顶指针增加一*/
S->data[S->top]=e; /*将新插入元素赋值给栈顶空间*/ return OK; }
2) 对于出栈操作Pop,代码如下:
/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
Status Pop (SqStack *S,SElemType *e) {
If(S->top==-1)
return ERROE; *e=S->data[S->top]; S->top--; return OK; }