数据结构(C语言)栈的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称栈的基本操作

实验目的

掌握栈这种抽象数据类型的特点及实现方法。

实验内容

从键盘读入若干个整数,建一个顺序栈或链式栈,并完成下列操作:

(1)初始化栈;

(2)判栈为空;

(3)出栈;

(4)入栈。

算法设计分析

(一)数据结构的定义

struct stackNode{

int data;

struct stackNode *nextPtr;

};

typedef struct stackNode listStact;

typedef listStact *stackNodePtr;

(二)总体设计

程序由主函数、入栈函数,出栈函数,删除函数判官是否为空函数和菜单函数组成。

(1)主函数:调用各个函数以实现相应功能

(三)各函数的详细设计:

Function1: void instruct() //菜单

(1):使用菜单显示要进行的函数功能;

Function2:void printStack(stackNodePtr sPtr) //输出栈

(1):利用if判断栈是否为空;

(2):在else内套用while(头指针不为空条件循环)循环输出栈元素;

Function3:void push(stackNodePtr *topPtr,int value //进栈

(1):建新的头指针;

(2):申请空间;

(3):利用if判断newPtr不为空时循环进栈

(4):把输入的value赋值给newPtr,在赋值给topPtr,再指向下一个位置;

Function4:int pop(stackNodePtr*topPtr) //删除

(1):建新的头指针newPtr;

(2):利用if判断newPtr是否为空,再删除元素。

(3):把topPtr等于newPtr,把头指针指向的数据赋值给topValue,输出要删除的数据值,头指针指向下一个位置,并清空newPtr;

(4):完成上述步骤后,return toPvalue,返回;

Function5int isEmpty(stackNodePtr sPtr) //是否为空(1):判断sPtr是否为空;

实验测试结果及结果分析

(一)测试结果

(1):一次想栈内输入1 2 3 4 5;

(2):并显示栈元素;

(3):删除栈内元素;

实验总结

通过本次实验,加强了对栈的认识与相关操作的算法,了解一些编程技巧。实验中发现一处错误,便查找原因,后来才发现是现定义时写的与后面的不一样导致的错误。注意输入或输出时要判断栈是否为空,这是最为关键的,也是要细心的地方。

附录实验程序代码

#include

struct stackNode

{

int data;

struct stackNode *nextPtr;

};

typedef struct stackNode listStact;

typedef listStact *stackNodePtr;

void push(stackNodePtr*,int); //入栈

int pop(stackNodePtr *); //删除

int isEmpty(stackNodePtr); //判断是否为空

void printStack(stackNodePtr); //输出栈

void instruct(); //菜单

int main()

{

int item; //入栈元素变量

int choice; //定义菜单选择变量

stackNodePtr sPtr=NULL; //先让头指针为空

instruct(); //输出菜单

scanf("%d",&choice); //输入选择

while(choice!=3) //循环条件不等于3

{

switch(choice) //选择条件

{

case 1:

printf("请输入一个整数,并回车\n");

scanf("%d",&item); //输入栈元素

push(&sPtr,item); //把item栈元素,赋值给sPtr头指针

printStack(sPtr); //输出栈中数据,从头指针开始输出

break;

case 2:

if(!isEmpty(sPtr)) //头指针不为空是循环条件

{

printf("删除栈顶的元素\n");

pop(&sPtr); //删除头指针sPtr 上的数据

printStack(sPtr); //输出栈中数据,从头指针开始输出

}

else

{

printf("栈中没有元素,无法删除\n"); //如果栈为空时,也就是头指针为空}

break;

default: //如果输入的不正确

printf("无效输入,请重新输入\n"); //选择输入不匹配

break;

}

instruct(); //输出菜单菜单循环

scanf("%d",&choice); //输入选择

}

}

void instruct() //菜单

{

printf("请选择下面的输入:\n"

"1:向栈中插入数据:\n"

"2:删除栈中的数据:\n"

"3:结束操作\n");

}

int isEmpty(stackNodePtr sPtr) //是否为空

{

return sPtr==NULL;

}

void printStack(stackNodePtr sPtr) //输出栈

{

if(sPtr==NULL) //当头指针为空时,(判断栈是否为空)

{

printf("空栈\n");

}

else //不为空时

{

printf("栈中的数据有:\n");

while(sPtr!=NULL) //循环条件头指针不为空

{

相关文档
最新文档