链式栈及其实现

lixiangrong
2024-01-05 / 0 评论 / 28 阅读 / 正在检测是否收录...
#include <stdio.h>
#include <stdlib.h>

typedef int dataType;

// 3.6 链式栈
typedef struct linkStackNode
{
    dataType data;
    struct linkStackNode *next;
}node,*linkStack;

// 1.初始化链式栈
void init(linkStack *top)
{
    *top = NULL;
}

// 2.判断栈是否为空
int empty(linkStack top)
{
    return !top;
}

// 3. 读取栈顶结点
node *read(linkStack top)
{
    return top;
}

// 4.输出链式栈中各结点值
void display(linkStack top)
{
    if(!top)
    {
        printf("栈空,无法输出结点!\n");
        return;
    }
    while (top)
    {
        printf("%d ",top->data);
        top = top->next;
    }
    printf("\n");
}

// 5.入栈
void push(linkStack *top, dataType x)
{
    node *q = (node*) malloc(sizeof(node));
    q->data = x;
    q->next = *top; // 新结点放在栈顶元素上面
    *top = q; // 栈顶指针指向新结点
}

// 6.出栈
void pop(linkStack *top)
{
    if(!*top)
    {
        printf("栈空,无法出栈!\n");
        return;
    }
    node *p = *top;
    *top = p->next; // 更新栈顶指针
    free(p);
}

int main()
{
    linkStack top; // 声明一个栈顶指针
    init(&top); // 初始化链式栈
    display(top); // 输出栈中各元素的值
    dataType a = 1,b = 2;
    printf("元素%d入栈\n",a);
    push(&top,a); // 入栈
    display(top);
    printf("元素%d入栈\n",b);
    push(&top,b);
    display(top);
    printf("出栈\n");
    pop(&top); // 出栈
    display(top);
    return 0;
}
0

评论 (0)

取消