zoukankan      html  css  js  c++  java
  • 编程实现栈的入栈/出栈操作

    完整代码如下,其实队栈都只是链表的一种变化而已

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct student * PNode;
    typedef struct stacklink * PStack;
    
    typedef struct student
    {
        int data;
        PNode next;
    }Node;
    
    typedef struct stacklink
    {
        PNode zhandi;
        PNode top;
    }Stack;
    
    PStack push(PStack stack,int num)
    {
        PNode p=(PNode)malloc(sizeof(Node));
        PNode temp;
        PStack q=stack;
        p->data=num;
        if(stack==NULL)
        {
            q=(PStack)malloc(sizeof(Stack));
            q->zhandi=p;
            q->top=p;
            q->zhandi->next=NULL;
            q->top->next=NULL;
            return q;
        }
        temp=q->top;
        q->top=p;
        q->top->next=temp;
        return q;
    }
    
    void print(PStack stack)
    {
        if(stack==NULL)
        {
            printf("栈为空
    ");
            return;
        }
        PStack q=stack;
        PNode p=q->top;
        while(p!=NULL)
        {
            printf("%d ",p->data);
            p=p->next;
        }
        printf("
    ");
    }
    
    PStack pop(PStack stack)
    {
        if(stack==NULL)
        {
            printf("栈为空
    ");
            return NULL;
        }
        PStack q=stack;
        PNode temp=q->top;
        if(q->top->next==NULL)
        {
            printf("栈只有一个结点,删除完毕
    ");
            return NULL;
        }
        q->top=q->top->next;
            return q;
    }
    
    int main(void)
    {
        int flag;
        int num;
        PStack stack=NULL;
        while(1)
            {
                   printf("选择入栈或者出栈:1为入栈,2为出栈,0为退出
    ");
                scanf("%d",&flag);
                if(flag==1)
                 {
                     printf("请选择要入栈的值:
    ");
                    scanf("%d",&num);
                    stack=push(stack,num);
                        printf("打印入栈后的栈:
    ");
                    print(stack);
                }
                else if(flag==2)
                {
                        stack=pop(stack);
                        printf("打印出栈后的队列:
    ");
                        print(stack);
                }
        }
        q->top=q->top->next;
            return q;
    }
    
    int main(void)
    {
        int flag;
        int num;
        PStack stack=NULL;
        while(1)
            {
                   printf("选择入栈或者出栈:1为入栈,2为出栈,0为退出
    ");
                scanf("%d",&flag);
                if(flag==1)
                 {
                     printf("请选择要入栈的值:
    ");
                    scanf("%d",&num);
                    stack=push(stack,num);
                        printf("打印入栈后的栈:
    ");
                    print(stack);
                }
                else if(flag==2)
                {
                        stack=pop(stack);
                        printf("打印出栈后的队列:
    ");
                        print(stack);
                }
                else
                        break;
        }    
        return 0;
    }

     程序猿必读

  • 相关阅读:
    品鉴-宋词
    【转载】全球水质最棒的十大景点
    Python文档管理与格式化工具
    Python音频处理
    Python剪切板提取、截图、图片粘贴,操作汇总
    Python多进程
    Wifi配置
    条码生成与解析
    谎言: “太空能看到的惟一的人工痕迹,长城!”
    VNC-Server安装配置详解
  • 原文地址:https://www.cnblogs.com/longzhongren/p/4418323.html
Copyright © 2011-2022 走看看