C语言链式栈的插入,取出,删除

链栈的基本操作

用结构体形成链,进行栈的基本操作

代码:

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

typedef struct stack
{
    ElemType data;
    struct stack *next;
} stack;

stack *head, *end;

void seqlistinit();
void push();
void printmenu();
ElemType pop();
ElemType gettop();
int isempty();
void destroy();

void printmenu()
{
    int m;
    printf("--------------------\n");
    printf("please input your operation:\n", &m);
    printf("1.push\n");
    printf("2.pop\n");
    printf("3.get top\n");
    printf("4.break and destroy\n");
    printf("--------------------\n");
}

void seqlistinit()
{
    head = (stack *)malloc(sizeof(stack));
    head->next = NULL;
    end = head;
}

int isempty()
{
    if (head == end)
        return 1;
    else
        return 0;
}

void push()
{
    int m;
    stack *q;
    q = (stack *)malloc(sizeof(stack));
    q->next = NULL;
    printf("please input the number you want\n");
    scanf("%d", &m);
    q->data = m;
    q->next = end;
    end = q;
    int k = end->data;
    printf("%d insert Succss!\n", k);
}

ElemType pop()
{
    if (isempty())
    {
        printf("Stack is empty\n");
        return 0;
    }
    else
    {
        ElemType m;
        stack *q = end;
        m = q->data;
        end = end->next;
        printf("%d pop succeeded\n", m);
        free(q);
        return m;
    }
}

ElemType gettop()
{
    if (isempty())
    {
        printf("Stack is empty\n");
        return 0;
    }
    else
    {
        ElemType m;
        m = end->data;
        printf("%d is the top data\n", m);
        return m;
    }
}

void destroy()
{
    stack *q;
    while (end != head)
    {
        q = end;
        end = end->next;
        free(q);
    }

    printf("destroy successful\n");
}

int main()
{
    seqlistinit();
    int n, m;
    int flag = 1;
    while (flag)
    {
        printmenu();
        scanf("%d", &m);
        switch (m)
        {
        case 1:
            push();
            break;
        case 2:
            pop();
            break;
        case 3:
            gettop();
            break;
        case 4:
            destroy();
            flag = 0;
            break;
        default:
            printf("please input again\n");
            break;
        }
    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值