数据结构(C语言)栈的基本操作 联系客服

发布时间 : 星期三 文章数据结构(C语言)栈的基本操作更新完毕开始阅读3303c1f6580102020740be1e650e52ea5418cec4

实验名称 栈的基本操作

实验目的

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

实验内容

从键盘读入若干个整数,建一个顺序栈或链式栈,并完成下列操作: (1)初始化栈; (2)判栈为空; (3)出栈; (4)入栈。

算法设计分析

(一)数据结构的定义

struct stackNode{ int data;

struct stackNode *nextPtr; };

typedef struct stackNode listStact; typedef listStact *stackNodePtr;

(二)总体设计

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

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

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,返回;

2

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

实验测试结果及结果分析

(一) 测试结果 (1):一次想栈内输入1 2 3 4 5; (2):并显示栈元素;

(3):删除栈内元素;

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(\ //输入选择 while(choice!=3) //循环条件不等于3 {

switch(choice) //选择条件 { case 1:

printf(\请输入一个整数,并回车\\n\ scanf(\ //输入栈元素

push(&sPtr,item); //把item栈元素,赋值给sPtr头指针 printStack(sPtr); //输出栈中数据,从头指针开始输出 break; case 2:

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

printf(\删除栈顶的元素\\n\

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

4