10.5:实现链栈的代码

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

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

typedef struct Stack 
{
    Node* top;
} Stack;

// 创建
Stack* createStack() 
{
    Stack* stack = (Stack*)malloc(sizeof(Stack));
    stack->top = NULL;
    return stack;
}

// 判断栈是否为空
int isEmpty(Stack* stack) 
{
    return (stack->top == NULL);
}

// 入栈
void push(Stack* stack, int data) 
{
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = stack->top;
    stack->top = newNode;
}

// 出栈
int pop(Stack* stack) 
{
    if (isEmpty(stack)) 
    {
        printf("栈已空,无法出栈!\n");
        return -1; // 返回一个特定值表示出错
    }
    Node* temp = stack->top;
    int data = temp->data;
    stack->top = stack->top->next;
    free(temp);
    return data;
}

// 访问栈顶元素
int peek(Stack* stack) 
{
    if (isEmpty(stack)) 
    {
        printf("栈为空!\n");
        return -1; // 返回一个特定值表示出错
    }
    return stack->top->data;
}

// 打印栈中的元素
void printStack(Stack* stack) 
{
    if (isEmpty(stack)) 
    {
        printf("栈为空!\n");
        return;
    }
    printf("栈中的元素为:");
    Node* current = stack->top;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

int main(int argc, const char *argv[]) 
{
    Stack* stack = createStack();
    
    push(stack, 10);
	push(stack, 20);
	push(stack, 30);
	push(stack, 40);
	
	printf("栈顶元素为:%d\n", peek(stack));
	printStack(stack);
	
	pop(stack);
	
	printf("栈顶元素为:%d\n", peek(stack));
	printStack(stack);
	
	free(stack); // 释放内存
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值