栈的顺序存储

#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define null 0
typedef int elemtype;
typedef struct stacknode
{
    elemtype data;//数据于域
    stacknode *next;
}stacknode;
typedef struct
{
    stacknode *top;//s->top指向栈顶元素
}linkstack;
//初始化链栈15
void initstack(linkstack *s)
{
    s->top=null;
    printf("\n已经初始化链栈!\n");
}
//链栈置空21
void setempty(linkstack *s)
{
    while(s->top){
        s->top=s->top->next;
    }
    s->top=null;
    printf("\n链栈被置空!\n");
}
//入栈36
void pushlstack(linkstack *s,elemtype x)
{   stacknode * p;
    p=new stacknode;
    if(!p){
        printf("内存空间分配失败!");
    }
    p->data=x;
    p->next=s->top;
    s->top=p;    
}

//出栈
elemtype poplstack(linkstack *s)
{
    int value;
    if(s->top==null){
        printf("栈空,出栈失败!");
    }
    stacknode *q;
    q=s->top;
    value=q->data;
    s->top=s->top->next;
    delete q;
    return value;
}

//取栈顶元素
elemtype stacktop(linkstack *s)
{
    if(s->top==0)
    {
        printf("\n链栈空\n");
        exit(-1);
    }
    return s->top->data;
}

//遍历链栈
void disp(linkstack *s)
{
    printf("\n链栈中的数据位:\n");
    printf("=======================================\n");
    stacknode *p;
    p=s->top;
    while(p!=null)
    {
        printf("%d\n",p->data);
        p=p->next;
    }
    printf("=====================================\n");
}

 

主函数

#include<stdio.h>
#include"linkstack.h"
void main()
{
    printf("==============链栈操作================\n");
    int i,m,n,a;
    linkstack *s;
    s=(linkstack *)malloc (sizeof(linkstack));
    int cord;
    do
    {
        printf("\n第一次使用必须初始化!\n\n");
        printf("\n        主菜单          \n");
        printf("\n        1 初始化链栈          \n");
        printf("\n        2 入栈          \n");
        printf("\n        3 出栈          \n");
        printf("\n        4 取栈顶元素          \n");
        printf("\n        5 置空链栈          \n");
        printf("\n        6 结束程序运行          \n");
        printf("\n----------------------------------\n");
        printf("请输入您的选择(1,2,3,4,5,6)");
        scanf("%d",&cord);
printf("\n");
switch(cord)
{
case 1: 
    {initstack(s);
    disp(s);
    }break;
case 2:
    {printf("输入将要压入链栈的数据的个数:n=");
    scanf("%d",&n);
    printf("依次将%d个数据压入链栈:\n",n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a);
        pushlstack(s,a);
    }
    disp(s);
    }break;
case 3:
    {
        printf("\n出栈操作开始!\n");
        printf("输入将要出栈的数据个数:m=");
        scanf("%d",&m);
        for(i=1;i<=m;i++)
        {
            printf("\n第%d次出栈的数据是:%d\n",i,poplstack(s));
        }break;
    }
case 4:
    {
        printf("\n\n链栈的栈顶元素为:%d\n\n",stacktop(s));
    }break;
case 5:
    {
        setempty(s);
        disp(s);
    }break;
case 6:exit(0);
    }
}while(cord<=6);
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值