栈的相关基本操作实验

一、实验目的
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;
}

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值