C/C++实现链栈代码

本文详细介绍了如何使用C/C++语言实现链栈,包括栈的存储结构、进栈(Push)、出栈(Pop)操作以及栈内容的显示(show_stack)。通过实例演示了栈的基本操作,适合初学者理解链式数据结构的应用。
摘要由CSDN通过智能技术生成

C/C++实现链栈代码

一、栈图

在这里插入图片描述

二、详细代码

#include <stdio.h>
#include <stdlib.h>
#include<iostream>
#include <malloc.h>
using namespace std;
#define STACKMAX 100
//链栈的存储结构
typedef struct stacknode
{
    int data;
    struct stacknode *next;
}Stacknode;
//指向栈的指针
typedef struct
{
    Stacknode *top;
}linkStack;
//进栈
void Push(linkStack &s,int x)
{
    Stacknode *p;
    p =(Stacknode *)malloc(sizeof(Stacknode));      //开辟空间
    p->data = x;            //构造结点
    p->next = s.top;        //入栈
    s.top = p;              //修改栈顶指针
}
//出栈操作
void Pop(linkStack &s,int &x)    
{
    Stacknode * p;
    if(s.top != NULL)       //栈不为空
    {
        p = s.top;
        x = p->data;
        s.top = p->next;
        free(p);
    }
    else
        printf("\n\t\t栈为空!");   //栈空
}
//显示栈内容
void show_stack(linkStack s)
{
    Stacknode *p;
    p = s.top;
    if(p == NULL)
        printf("\n\t\t栈为空!");
    else
    {
        printf("\n\t\t栈元素为:");
        while(p != NULL)
        {
            printf("%6d",p->data);
            p = p->next;
        }
        printf("\n");
    }
}
int main()
{
    linkStack s;
    int i = 1,j = 1,val,n;
    char choice;
    s.top = NULL;
    while(1)
    {
        printf("\n");
        printf("\n\t\t***************************************************");
        printf("\n\t\t*                     栈子系统                    *");
        printf("\n\t\t***************************************************");
        printf("\n\t\t*                 1------进  表                   *");
        printf("\n\t\t*                 2------出  栈                   *");
        printf("\n\t\t*                 3------显  示                   *");
        printf("\n\t\t*                 0------退出程序                 *");
        printf("\n\t\t***************************************************");
        printf("\n\t\t请选择菜单号:");
        fflush(stdin);//原型:int fflush(FILE *stream) 可以提高打印效率 
        choice = getchar();
        switch(choice)
        {
            case '1':
                while(1)
                {
                    printf("\n\t\t键入一个整数并按回车:");
                    scanf("%d",&val);
                    if(val != 0)
                        Push(s,val);
                    else
                        break;
                }
                break;
            case '2':
                    if(s.top != NULL)
                    {
                        Pop(s,val);
                        printf("\n\t\t出栈元素为:%6d\n",val);
                    }

                    else
                        printf("\n\t\t栈为空,无法出栈!");
                    break;
            case '3':
                    show_stack(s);
                    break;
            case 0:
                    exit(0);
            default:
                printf("\n\t\t输入错误!请重新输入!");
                break;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值