编程实现栈的入栈/出栈操作

本文介绍了一种使用链表来实现栈数据结构的方法,并提供了完整的C语言代码示例。通过对链表节点的操作实现了栈的基本功能,如入栈、出栈及打印栈内元素等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#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("栈为空\n");
        return;
    }
    PStack q=stack;
    PNode p=q->top;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

PStack pop(PStack stack)
{
    if(stack==NULL)
    {
        printf("栈为空\n");
        return NULL;
    }
    PStack q=stack;
    PNode temp=q->top;
    if(q->top->next==NULL)
    {
        printf("栈只有一个结点,删除完毕\n");
        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为退出\n");
            scanf("%d",&flag);
            if(flag==1)
             {
                 printf("请选择要入栈的值:\n");
                scanf("%d",&num);
                stack=push(stack,num);
                    printf("打印入栈后的栈:\n");
                print(stack);
            }
            else if(flag==2)
            {
                    stack=pop(stack);
                    printf("打印出栈后的队列:\n");
                    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为退出\n");
            scanf("%d",&flag);
            if(flag==1)
             {
                 printf("请选择要入栈的值:\n");
                scanf("%d",&num);
                stack=push(stack,num);
                    printf("打印入栈后的栈:\n");
                print(stack);
            }
            else if(flag==2)
            {
                    stack=pop(stack);
                    printf("打印出栈后的队列:\n");
                    print(stack);
            }
            else
                    break;
    }    
    return 0;
}

 程序猿必读

转载于:https://www.cnblogs.com/longzhongren/p/4418323.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值