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

实验四:

作者说:

实验只包括栈的相关操作,没有用到队列,其实我觉得队列也挺复杂的。哈哈哈,刚刚看了一下,下一个实验就是关于队列的,慢慢学吧,加油!

定义:

栈和队列是两种特殊的线性表,即操作受限的线性表,只是对插入、删除运算加以限制。

栈是只允许在一端进行插入、删除运算,因而是后进先出表 LIFO,允许插入和删除运算的一端称为     栈顶       。不允许插入和删除运算的一端称为  栈底        ;


一、运行效果截图

数据结构实验4、顺序栈的基本操作及应用_第1张图片

二、实验要求

(1)实验目的

通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。

(2)实验内容

用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制、八进制十六进制

(3)参考界面

菜单中包括以下功能:

1.初始化栈

2.销毁栈

3.清空栈

4.栈判空,

5.求栈长度,

6.获取栈顶元素

7.插入一个 元素

8.删除一个元素

9.输出所有元素,

10.进制转换

(4)验收/测试用例

通过菜单调用各个操作,测试点:

  • 没有初始化前进行其他操作,程序是否能控制住;
  • 初始化一个栈;
  • 判栈空,屏幕显示栈为空;
  • 3个数入栈, 2、4、6;
  • 栈长度,屏幕输出3;
  • 取栈顶元素,再判栈空,然后再判栈长度。让学生知道取栈顶元素不改变栈中的内容,栈顶指针不发生改变;
  • 出栈,再判栈长度和输出栈中内容;(多次出栈,直到栈为空;再出栈,是否提示栈为空)
  • 销毁栈,再做其他操作,判断程序是否能控制;
  • 数制转换,(允许用户输入想把十进制转换成进制),然后灵活的转换成对应的进制。

三、代码示例

#include
#include
#define STACK_INIT_SIZE  100//存储空间初始分配量。 
#define STACKINCREMENT 10//存储空间分配增量。 
using namespace std;

typedef int elemtype;
typedef struct{
	elemtype *base;//在栈构造之前和销毁之后,base的值为NULL。 
	elemtype *top;//栈顶指针。 
	int stacksize;//当前已分配的存储空间,以元素为单位。 
}Stack;


void Initstack(Stack &s);//1.初始化栈
void Destroystack(Stack &s);//2.销毁栈
void Clearstack(Stack &s);//3.清空栈
int StackEmpty(Stack s);//4.栈判空
int Stacklength(Stack s);//5.求栈长度
elemtype GetTop(Stack s);//6.获取栈顶元素
void Push(Stack &s,elemtype e);//7.插入一个元素
elemtype Pop(Stack &s);//8.删除一个元素
elemtype Stackvisit(Stack &s,int i);//9.输出所有元素
void conversion(Stack &jinzhi,int choose,int num);//10.进制转换

int main()
{
	Stack zhan;
	zhan.base=NULL;
	zhan.top=NULL;
	elemtype yuansu;
	
	int in=1;
	cout<>select;
	switch(select)
	{
		case 1://1.初始化栈.
			system("cls");
			Initstack(zhan);
			if(!zhan.base)
			{
				cout<<"存储空间分配失败,请重新操作!"<>yuansu;
				if(zhan.top-zhan.base>=zhan.stacksize)//栈满,追加存储空间。 
				{
					zhan.base=(elemtype *)realloc(zhan.base,(zhan.stacksize+STACKINCREMENT)*sizeof(elemtype));
					if(!zhan.base){
						cout<<"存储空间分配失败!请重新操作。"<0;i--)
				{
					cout<>num;
			if(num<=0)
			{
				cout<<"您输入的数据不合法!"<>choose;
				switch(choose)
				{
					case 1:
						conversion(jinzhi,choose,num);
						cout<=10)
							{
								switch(num)
								{
									case 10:
										cout<<"A";
										break;
									case 11:
										cout<<"B";
										break;
									case 12:
										cout<<"C";
										break;
									case 13:
										cout<<"D";
										break;
									case 14:
										cout<<"E";
										break;
									case 15:
										cout<<"F";
										break;
								}
							}
							else
							{
								cout<

 

你可能感兴趣的:(数据结构,数据结构,栈,c++)