1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C语言-数据结构-栈-实验报告

C语言-数据结构-栈-实验报告

时间:2019-05-30 08:13:57

相关推荐

C语言-数据结构-栈-实验报告

实验报告内容:

一、实验目的、要求:

(1)熟练掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。

(2)编写适当的主函数和相关函数,使实验题目运行出正确结果。

(3)当场编程、调试、编译。

(4)程序具有一定的健壮性、可读性,尽量简洁。

(5)程序运行完成后分别存盘,上交实验报告,要求写出实验体会

二、实验内容:

(1)实验题目

(2)主要函数的算法设计思想

(3)程序清单

(3)测试数据、实验结果及结论

(4)实验体会(实验中存在的问题、进一步的想法等)

1、第一道题:

(1)实验题目

编程实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:

1)初始化顺序栈;

2)给定一个元素,将此元素压入此栈中;

3)将栈顶一个元素弹出此栈。

(2)主要函数的设计思想

1)进栈函数的设计思想

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) exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;}

2)出栈函数的设计思想

Status Pop(SqStack &S,SElemType &e){if(S.top==S.base) return ERROR;e=*--S.top;return OK;}

(3)程序清单

#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define OVERFLOW -2typedef int SElemType;typedef int Status;//----- 栈的顺序存储表示 -----#define STACK_INIT_SIZE 100 // 存储空间的初始分配量#define STACKINCREMENT 10 // 存储空间的分配增量typedef struct {SElemType *base; SElemType *top; int stacksize; } SqStack;// 构造一个空栈SStatus InitStack(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;return OK;}// 判栈S是否为空栈Status StackEmpty(SqStack S){if (S.top==S.base) return OK;else return ERROR;}//入栈函数Status Push (SqStack &S, SElemType e) {if(S.top-S.base>=S.stacksize){S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;}//Push//出栈函数Status Pop (SqStack &S, SElemType &e) {if(S.top==S.base) return ERROR;e=*--S.top;return OK;}//Pop//输出顺序栈函数void OutStack(SqStack S){int *p;if(S.top == S.base){printf("这是一个空栈!");}elsefor(p= S.top-1; p>= S.base;p--)printf("%6d", *p);printf("\n"); }//主函数int main(){SqStack s;int cord; SElemType a;printf("第一次使用必须初始化!\n");do{printf("\n 主菜单\n");printf(" 1 初始化顺序栈 ");printf(" 2 插入一个元素 ");printf(" 3 删除栈顶元素 ");printf(" 4 结束程序运行 ");printf("\n------------------------------------------------------------------------------\n");printf("请输入您的选择( 1, 2, 3, 4)");scanf("%d",&cord);printf("\n");switch(cord){case 1:InitStack(s);OutStack(s);break;case 2:printf("请输入要插入的数据元素:a=");scanf("%d",&a);Push(s,a);printf("%d 进栈之后的栈:",a);OutStack(s);break;case 3:Pop(s,a);printf("栈顶元素 %d 出栈之后的栈:",a);OutStack(s);break;case 4:exit(0);}}while (cord<=4);}

(4)测试数据、实验结果及结论

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。