您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页数据结构 实验4 顺序栈的基本操作及应用

数据结构 实验4 顺序栈的基本操作及应用

来源:华佗小知识


实验3 顺序栈的基本操作及应用

一、 实验目的

1. 帮助学生理解栈结构的特点即后进先出。

2.掌握栈的顺序存储结构和基本操作,重点掌握入栈和弹栈操作。验证所学的算法和数据结构,以便在实际背景下灵活运用。

3.提高应用栈解决实际问题的能力。

二、 实验内容

1.仔细阅读程序sqstack.h和sqstack .c练习顺序栈基本操作,完成该程序并上机运行测试。

2.试利用栈作为辅助空间,编写一个算法,判别给定的字符序列是否是“回文”。回文是指不看空格正读反读均相同的字符序列,如\"abba\"和\"ab db a\"均是回文,但\"good\"不是回文。

int Palindrome(char *str)

/*判别字符序列str是否是“回文”。是返回1,不是返回0*/

{ sqstack S;

}

注:题目1程序清单

/*****************sqstack.h***********************/

/************顺序栈类型定义***********/

#define INITSIZE 100

typedef int ElemType;

typedef struct

{ ElemType *base;/*栈顶指针,又是存储元素的一维数组*/

int top; /*栈顶指针,记录栈顶的下一个位置*/

int stacksize; /* 记录存储空间的尺寸*/

}sqstack;

/***********函数声明**************/

void initstack(sqstack *S);

int getlen(sqstack S);

int gettop(sqstack S,ElemType *e);

int push(sqstack *S, ElemType x);

int pop(sqstack *S, ElemType *e);

int emptystack(sqstack S);

void print(sqstack S);

/*************函数定义***********/

/**构造空栈**/

void initstack(sqstack *S)

{/*构造一个空栈由指针S指出。*/

S->base= __(1)___;

if (!S->base)

{printf(\"OVERFLOW!\"); exit(1);}

S->top=__(2)__;

S->stacksize = INITSIZE;

}

/**求栈长操作**/

int getlen(sqstack S)

{

return (__(3)___);

}

/**取栈顶元素操作**/

int gettop(sqstack S,ElemType *e)

{

if(S.top == 0)

return 0;

_____(4)____________;

return 1;

}

/**压栈**/

int push(sqstack *S, ElemType x)

{/*向栈顶插入元素x,成功返回1,失败返回0*/

if(S->top == S->stacksize) /*栈已满*/

{

S->base = ___(5)______;

if(!S->base)

{ printf(\"OVERFLOW!\"); return 0;}

S->stacksize ++;

}

/*插入*/

____(6)_______;

____(7)___________;

return(1);

}

/**弹栈**/

int pop(sqstack *S, ElemType *e)

{/*若栈空, 则返回0*/

if(S->top==0)

return 0;

/*删除*/

______(8)___________;

______(9)____________;

return 1;

}

/**判栈空**/

int emptystack(sqstack S)

/*判栈S为空栈时返回值为1, 反之为0*/

{

return(____(10)____);

}

/**输出栈元素**/

void list(sqstack S)

{/*从栈底元素输出到栈顶元素*/

int i = 0;

if(emptystack(S)) {printf(\"none!\\n\"); return;}

while(i{

printf(\"%4d\

i++;

}

printf(\"\\n\");

}

/***************** sqstack.c文件*************** **/

______(11)___________

void menu()

{

printf(\"******************menu***************\\n\");

printf(\" 0:list()\\n\");

printf(\" 1:getlen()\\n\");

printf(\" 2:gettop()\\n\");

printf(\" 3:push()\\n\");

printf(\" 4:pop()\\n\");

printf(\" 5:emptystack()\\n\");

printf(\" 6:exit()\\n\");

printf(\"*************************************\\n\");

printf(\"Please choice:\");

}

main()

{sqstack S;

ElemType x;

char choice;

//clrscr();

printf(\"\\n\\n-------------------SqStack Demo is running...----------------\\n\\n\");

______(12)_____;/*S初始化*/

menu();

/*根据选择演示顺序栈的基本操作*/

while(1)

{

scanf(\"%c\

switch(choice)

{

case '0': /*调用list()输出栈中元素*/

printf(\"The stack:\");

____(13)_______;

printf(\"Please choice:\");

break;

case '1': /*调用getlen()求栈长*/

printf(\"The length of S is %d.\\n\_(14)_______);

printf(\"Please choice:\");

break;

case '2': /*调用gettop()取栈顶元素*/

if(___(15)_____)

printf(\"The top element:%4d\\n\

else printf(\"No element!\\n\");

printf(\"Please choice:\");

break;

case '3': /*调用push()入栈*/

printf(\"Push an element! x=\");

scanf(\"%d\

if(___(16)__________)

printf(\"Push an element is failed!\\n\");

printf(\"Please choice:\");

break;

case '4': /*调用pop()出栈*/

if(____(17)________)

printf(\"No element!\\n\");

else

printf(\"Pop the top element:%d\\n\

printf(\"Please choice:\");

break;

case '5': /*调用emptystack()判栈空*/

if(____(18)_______) printf(\"The satck is empty!\\n\");

else printf(\"The stack is unempty!\\n\");

printf(\"Please choice:\");

break;

case '6': printf(\"Exit!\");

exit(1);

break;

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务