链栈的实现---2018-10-23

  • 头文件
#pragma once

#include
#include
#include

#define ElemType int

typedef struct StackNode
{
    ElemType data;
    struct StackNode *next;

}StackNode,*LinkStack;

//初始化
void InitStack(LinkStack *s);

//入栈操作
void Push(LinkStack *s,ElemType x);

//出栈操作
void Pop(LinkStack *s);

//显示
void Show(LinkStack *s);
  • cpp文件
#include"LinkStack.h"

void main()
{
    LinkStack st;
    InitStack(&st);
    ElemType Item;

    int select;
    while (1)
    {
        printf("********************************\n");
        printf("*[1].push     [2].pop          *\n");
        printf("*[3].show     [4].quit_system  *\n");
        printf("********************************\n");
        printf("请选择:>");
        scanf_s("%d",&select);
        switch (select)
        {
        case 1://入栈
            printf("请输入要入栈的数据(-1结束)");
            while (scanf_s("%d",&Item),Item != -1)
            {
                Push(&st,Item);
            }
            break;
        case 2://出栈
            Pop(&st);
            break;
        case 3://显示
            Show(&st);
            break;
        case 4://结束
            break;
        default:
            printf("输入的数据不合法,请重新输入");
            break;
        }
    }
}

//初始化
void InitStack(LinkStack *s)
{
    *s = NULL;//栈顶指针
}

//入栈操作
void Push(LinkStack *s,ElemType x)
{
    StackNode *t = (StackNode*)malloc(sizeof(StackNode));
    assert(t != NULL);
    t->data = x;
    if (*s == NULL)
    {
        *s = t;
        t->next = NULL;
    }
    else
    {
        t->next = *s;
        *s = t;
    }
}

//出栈操作
void Pop(LinkStack *s)
{
    if (*s == NULL)
    {
        printf("栈为空.\n");
        return;
    }
    StackNode *p = *s;
    *s = p->next;
    free(p);
    p = NULL;
    printf("出栈成功.\n");
}

//显示
void Show(LinkStack *s)
{
    if (*s == NULL)
    {
        printf("栈为空.\n");
        return;
    }
    StackNode *p = *s;
    while (p != NULL)
    {
        printf("%d\n",p->data);
        p = p->next;
    }
}
  • 运行结果

你可能感兴趣的:(链栈的实现---2018-10-23)