一、实验目的
1.掌握栈的存储结构的表示和实现方法;
2.掌握栈的入栈和出栈等基本操作算法实现;
3.了解栈在解决实际问题中的简单应用。
二、实验内容
1.建立顺序栈,并在顺序栈上实现入栈和出栈操作;
2.建立链栈,并在链栈上实现入栈和出栈操作。
三、实验要求
1.建立顺序栈,并在顺序栈上实现入栈和出栈操作;
(1)根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值;
(2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值;
(3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值;
2.建立链栈,并在链栈上实现入栈和出栈操作;
(1)根据输入的栈中元素个数和各元素值建立一个链栈,并输出链栈中各元素值, 观察输入的内容与输出的内容是否一致,特别注意栈顶元素的位置;
(2)将数据元素x入栈,并输出入栈后的链栈中各元素值;
(3)将链栈中的栈顶元素出栈,并输入出栈元素的值和出栈后链栈中各元素值。
#include<stdio.h>
#define MAXSIZE 100
#include<bits/stdc++.h>
using namespace std;
typedef int SELemType; // SELemType类型根据实际情况而定,这里假设为int
typedef struct
{
SELemType data[MAXSIZE];
int top;
}SeqStack;
// 栈初始化
void Init_SeqStack(SeqStack* s)
{
s->top = -1;
}
// 判断栈为空
int Empty_SeqStack(SeqStack* s)
{
if (s->top == -1)
return 1;
else
return 0;
}
// 入栈
void Push_Stack(SeqStack *s, SELemType e)
{
if (s->top == MAXSIZE - 1)
printf("Stack is full!\n");
else
{
s->top++;
s->data[s->top] = e;
}
}
// 出栈
void Pop_SeqStack(SeqStack* s, SELemType* e)
{
if (s->top == -1)
printf("栈为空!\n");
else
{
*e = s->data[s->top];
s->top--;
}
}
// 取栈顶元素
void Top_SeqStack(SeqStack* s, SELemType* e)
{
if (s->top == -1)
printf("栈为空!\n");
else
{
*e = s->data[s->top];
printf("出栈成功!\n");
}
}
// 输出
void Output_SeqStack(SeqStack* s)
{
SeqStack* w;
int i;
printf("栈中的元素有:");
for (i = s->top; i >= 0; i--)
printf("%d ", s->data[i]);
printf("\n");
}
//销毁
void Destroy_SeqStack(SeqStack* s)
{
s->top == -1;
}
//遍历
void Print_SeqStack(SeqStack* S)
{
while(S->top != -1)
{
cout<<S->data[S->top--]<<" ";
}
cout<<endl;
}
void Menu()
{
puts("****************");
puts("1.初始化");
puts("2.判断栈为空");
puts("3.入栈");
puts("4.出栈");
puts("5.取栈顶元素");
puts("6.销毁栈");
puts("7.遍历栈");
puts("0.程序结束");
puts("****************");
}
// 主函数
int main()
{
SeqStack S;
int choice = -1, i,n;
SELemType e;
Menu();
while (choice == -1)
{
printf("\nYour choice is:\n");
scanf("%d", &i);
switch (i)
{
case 1:
Init_SeqStack(&S);
printf("初始化完成!\n");
break;
case 2:
if(Empty_SeqStack(&S) == 1)
printf("栈为空!\n");
else
printf("栈不为空!\n");
break;
case 3:
printf("请输入入栈的数量:\n");
scanf("%d", &n);
printf("请输入需要入栈的数据,用空格隔开:\n");
for (int j = 0; j < n; j++)
{
scanf("%d", &e);
Push_Stack(&S, e);
}
Output_SeqStack(&S);
break;;
case 4:
Pop_SeqStack(&S, &e);
Output_SeqStack(&S);
break;
case 5:
Top_SeqStack(&S, &e);
printf("栈顶元素为:%d\n", e);
Output_SeqStack(&S);
break;
case 6:
Destroy_SeqStack (&S);
printf("栈销毁成功!\n");
case 7:
Print_SeqStack(&S);
Output_SeqStack(&S);
case 0:
choice = 0;
break;
default:printf("选择有误,请重新选择! \n");
}
}
puts("\n");
//puts("\t\t\t\t By Cherish599");
return 0;
}