数据结构进阶:使用链表实现栈和队列详解与示例(C, C#, C++)

文章目录

  • 1、 栈与队列简介
    • 栈(Stack)
    • 队列(Queue)
  • 2、使用链表实现栈
    • C语言实现
    • C#语言实现
    • C++语言实现
  • 3、使用链表实现队列
    • C语言实现
    • C#语言实现
    • C++语言实现
  • 4、链表实现栈和队列的性能分析
    • 时间复杂度
    • 空间复杂度
    • 性能特点
    • 与其他实现的比较
  • 总结

数据结构进阶:使用链表实现栈和队列详解与示例(C, C#, C++)_第1张图片


在软件开发中,数据结构是不可或缺的一部分。本文将详细介绍如何使用链表来实现栈和队列这两种基本的数据结构,并提供C、C#和C++三种语言的示例代码。

1、 栈与队列简介

栈(Stack)

栈是一种后进先出(Last In First Out, LIFO)的数据结构。栈的基本操作包括:

  1. push:将元素压入栈顶。
  2. pop:移除栈顶元素。
  3. peek:查看栈顶元素。

队列(Queue)

队列是一种先进先出(First In First Out, FIFO)的数据结构。队列的基本操作包括:

  1. enqueue:在队列尾部添加元素。
  2. dequeue:移除队列头部元素。
  3. peek:查看队列头部元素。

2、使用链表实现栈

链表是一种灵活的数据结构,非常适合实现栈。

C语言实现

#include 
#include 

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

typedef struct Stack {
   
   
    Node* top;
} Stack;

void initStack(Stack* stack) {
   
   
    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 (stack->top == NULL) {
   
   
        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 (stack->top == NULL) {
   
   
        printf("栈为空\n");
        return -1;
    }
    return stack->top->data;
}

void destroyStack(Stack* stack) {
   
   
    while (stack->top != NULL) {
   
   
        Node* temp = stack->top;
        stack->top = stack->top->next;
        free(temp);
    }
}

int main() {
   
   
    Stack stack;
    initStack(&stack);
    push(&stack, 1);
    push(&stack, 2);
    push(&stack, 3);
    printf("栈顶元素:%d\n", peek(&stack));
    printf("出栈元素:%d\n", pop(&stack));
    printf("出栈元素:%d\n", pop(&stack));
    destroyStack(&stack);
    return 0;
}

C#语言实现

using System;

public class Node {
   
   
    public int Data {
   
    get; set; }
    public Node Next {
   
    get; set; }
}

public class Stack {
  

你可能感兴趣的:(数据结构进阶:使用链表实现栈和队列详解与示例(C, C#, C++))