zoukankan      html  css  js  c++  java
  • C语言实现链栈的初始化&进栈&出栈&读取栈顶元素

    Code

    /*链表实现栈的一系列操作*/
     
    #include<stdio.h>
    #include<stdlib.h> 
    
    #define OK 1
    #define ERROR 0
    
    typedef struct node
    {
        int data;
        struct node *next;
    }LinkStackNode,*LinkStack;
    
    /**********************各个子函数的定义*********************/
    void initStack(LinkStack *top);       //初始化链栈 
    int push(LinkStack top,int n);        //链栈进栈操作 
    void pop(LinkStack top);              //链栈出栈操作 
    int getTop(LinkStack top,int *s);     //读取链栈栈顶元素 
    
    int main()
    {
        LinkStack top;
        int choice;
        while(true)
        {
            printf("*****************Please enter your choice*****************
    
    ");
            printf("                choice 1:Stack initialization
    ");
            printf("                choice 2:Into the stack
    ");
            printf("                choice 3:Out of the stack
    ");
            printf("                choice 4:Read the stack elements
    ");
            printf("                choice 0:exit
    
    ");
             scanf("%d",&choice);
            switch(choice)
            {
                case 1:
                    initStack(&top);
                    break;
                case 2:
                    int n;
                    printf("Please enter the number into the stack elements:");
                    scanf("%d",&n);
                    (push(top,n)==1)?printf("%d个元素依次进栈成功
    ",n):printf("%d个元素依次进栈失败
    ",n);    
                    break;
                case 3:
                    pop(top);
                    break;
                case 4:
                    int* s;
                    (getTop(top,s)==1)? printf("栈顶元素是:%d.
    ",*s):printf("An empty stack error!!!!
    "); //三目运算符
                    break;        
                case 0:
                    exit(0);
                    break;
                default:
                    printf("ERROR!!
    ");
                    exit(0);
                    break;
            }
        }
        return 0;
    }
    
    /**********************各个子函数功能的实现*********************/
    void initStack(LinkStack *top)
    {   //初始化 
        *top=(LinkStack)malloc(sizeof(LinkStackNode));  //带头结点的单链表 
        (*top)->next=NULL; 
    } 
     
    int push(LinkStack top,int n)    //进栈 ,将元素压入栈中 
    {        
        LinkStackNode *temp;
        int n1,n2;
        printf("Please enter into the stack elements in turn:
    ");  
        for(n1=0;n1<n;n1++)
        {
            scanf("%d",&n2);
            temp=(LinkStackNode *)malloc(sizeof(LinkStackNode));  //结点申请空间 
            if(temp==NULL) return ERROR;  //申请空间失败
            temp->data=n2;
            temp->next=top->next;          //采用头插法存储元素 
            top->next=temp; 
        }
        return OK;
    }
    
    void pop(LinkStack top)          //栈顶元素出栈 
    {           
        int a;
        LinkStackNode *temp;
        if(top->next==NULL)
        {               //栈为空,出栈失败 
            printf("An empty stack error!!!!
    ");
        }
        else
        {
            temp=top->next;
            a=temp->data;
            top->next=temp->next;
            free(temp);
            printf("栈顶元素%d出栈成功.
    ",a);  
        }  
    }
    
    int getTop(LinkStack top,int *s)        //获读取栈顶元素 
    {    
        if(top->next==NULL)              //栈为空,读取栈顶元素失败 
        { 
            return ERROR;
        }
        else
        {
            *s=(top->next)->data;           //读取栈顶元素,不出栈 
            return OK;
        }
    }
  • 相关阅读:
    Java使用Apache Commons Exec运行本地命令行命令
    Win10安装PostgreSQL9.6
    软件工程学习笔记——软件工具
    软件工程学习笔记——软件过程模型
    软件工程学习笔记——软件过程
    软件工程学习笔记——软件生存周期
    软件工程学习笔记——软件工程基本原理
    MySQL学习笔记——MySQL5.7的启动过程(一)
    Windows下免费的屏幕录制软件——EV录屏——推荐
    SecureCRT 8.1破解方式
  • 原文地址:https://www.cnblogs.com/qftm/p/10317154.html
Copyright © 2011-2022 走看看