栈(c语言)链表实现

节点的结构

struct Node
{
    int value;
    struct Node* next;
};
typedef struct Node Node;

基本功能和操作演示

 

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

struct Stack
{
    Node *node;
    int size;
};
typedef struct Stack Stack;

// 建立一个节点
Node *createNode(int value)
{
    Node *node = (Node *) malloc(sizeof(Node));
    node->next = NULL;
    node->value = value;
    return node;
}

// 建立一个空栈
Stack *createStack()
{
    Stack *stack = (Stack *) malloc(sizeof(Stack));
    stack->node = NULL;
    stack->size = 0;
    return stack;
}

// 添加一个元素
void push(Stack *stack, Node *node)
{
    node->next = stack->node;
    stack->node = node;
    stack->size++;
}

// 检测是否为空
int isEmpty(Stack *stack)
{
    return stack->size <= 0 ? 1 : 0;
}

// 弹出一个元素
void pop(Stack *stack)
{
    if (isEmpty(stack))
    {
        printf("this stack is empty!");
        return;
    }
    Node *node = stack->node;
    stack->node = stack->node->next;
    stack->size--;
    free(node);
}

// 获取栈顶元素
Node *top(Stack *stack)
{
    if (isEmpty(stack))
    {
        printf("this stack is empty!");
        return NULL;
    }
    return stack->node;
}

// 获取当前元素的个数
int size(Stack *stack)
{
    return stack->size;
}

int main()
{
    Stack *stack = createStack();
    Node *node = createNode(10);
    push(stack, node);
    node = createNode(20);
    push(stack, node);
    printf("size = %d\n", size(stack));
    while (!isEmpty(stack))
    {
        node = top(stack);
        printf("%d ", node->value);
        pop(stack);
    }
    printf("\n");
    printf("size = %d\n", size(stack));
    return 0;
}

 

posted on 2020-07-30 20:16  哈哈哈天蝎  阅读(454)  评论(0)    收藏  举报

导航