数据结构之栈的实现与排序详解与示例(C, C#, C++)
创始人
2025-01-10 01:03:36
0

文章目录

    • 栈的基本操作
    • 栈的排序
    • 总结

在这里插入图片描述


栈是一种后进先出(Last In First Out, LIFO)的数据结构。在栈中,元素的插入和删除操作都发生在同一端,即栈顶。本文将详细介绍如何实现栈的排序,并提供C, C#, C++三种语言的示例。

栈的基本操作

在介绍栈的排序之前,我们先回顾一下栈的基本操作:

  1. 初始化栈
  2. 入栈(push)
  3. 出栈(pop)
  4. 获取栈顶元素
  5. 判断栈是否为空

以下是C, C#, C++三种语言实现栈的基本操作的示例:

C语言

#include  #include   typedef struct Stack {     int *data;     int top;     int maxSize; } Stack;  // 初始化栈 void initStack(Stack *s, int size) {     s->data = (int *)malloc(size * sizeof(int));     s->top = -1;     s->maxSize = size; }  // 入栈 void push(Stack *s, int value) {     if (s->top < s->maxSize - 1) {         s->top++;         s->data[s->top] = value;     } else {         printf("栈满,无法入栈!\n");     } }  // 出栈 int pop(Stack *s) {     if (s->top >= 0) {         int value = s->data[s->top];         s->top--;         return value;     } else {         printf("栈空,无法出栈!\n");         return -1;     } }  // 获取栈顶元素 int getTop(Stack *s) {     if (s->top >= 0) {         return s->data[s->top];     } else {         printf("栈空!\n");         return -1;     } }  // 判断栈是否为空 int isEmpty(Stack *s) {     return s->top == -1; } 

C#语言

using System;  public class Stack {     private int[] data;     private int top;     private int maxSize;      public Stack(int size) {         data = new int[size];         top = -1;         maxSize = size;     }      // 入栈     public void Push(int value) {         if (top < maxSize - 1) {             top++;             data[top] = value;         } else {             Console.WriteLine("栈满,无法入栈!");         }     }      // 出栈     public int Pop() {         if (top >= 0) {             int value = data[top];             top--;             return value;         } else {             Console.WriteLine("栈空,无法出栈!");             return -1;         }     }      // 获取栈顶元素     public int GetTop() {         if (top >= 0) {             return data[top];         } else {             Console.WriteLine("栈空!");             return -1;         }     }      // 判断栈是否为空     public bool IsEmpty() {         return top == -1;     } } 

C++语言

#include  #include   using namespace std;  class Stack { private:     vector data;     int top;     int maxSize;  public:     Stack(int size) : top(-1), maxSize(size) {}      // 入栈     void push(int value) {         if (top < maxSize - 1) {             top++;             data.push_back(value);         } else {             cout << "栈满,无法入栈!" << endl;         }     }      // 出栈     int pop() {         if (top >= 0) {             int value = data[top];             data.pop_back();             top--;             return value;         } else {             cout << "栈空,无法出栈!" << endl;             return -1;         }     }      // 获取栈顶元素     int getTop() {         if (top >= 0) {             return data[top];         } else {             cout << "栈空!" << endl;             return -1;         }     }      // 判断栈是否为空     bool isEmpty() {         return top == -1;     } }; 

栈的排序

栈的排序是指将一个无序栈调整为有序栈。这里我们以升序排序为例,介绍两种常见的栈排序方法:递归法和辅助栈法。

递归法
递归法的基本思想是:每次递归地将栈顶元素出栈,然后对剩余的栈进行排序,最后将栈顶元素重新入栈。

以下是C, C#, C++三种语言实现递归法栈排序的代码示例:

C语言

void sortStack(Stack* stack) {     if (!isEmpty(stack)) {         int value = pop(stack);         sortStack(stack);         sortedInsert(stack, value);     } }  void sortedInsert(Stack* stack, int value) {     if (isEmpty(stack) || value > getTop(stack)) {         push(stack, value);     } else {         int temp = pop(stack);         sortedInsert(stack, value);         push(stack, temp);     } } 

C#语言

public void SortStack() {     if (!IsEmpty()) {         int value = Pop();         SortStack();         SortedInsert(value);     } }  private void SortedInsert(int value) {     if (IsEmpty() || value > GetTop()) {             Push(value);     } else {         int temp = Pop();         SortedInsert(value);         Push(temp);     } }  

C++语言

void sortStack() {     if (!isEmpty()) {         int value = pop();         sortStack();         sortedInsert(value);     } }  void sortedInsert(int value) {     if (isEmpty() || value > getTop()) {         push(value);     } else {         int temp = pop();         sortedInsert(value);         push(temp);     } } 

辅助栈法
辅助栈法的基本思想是:使用一个额外的栈来辅助排序。将原栈的元素逐个出栈,然后按照顺序插入到辅助栈中,最后将辅助栈的元素逐个出栈放回原栈。

以下是C, C#, C++三种语言实现辅助栈法栈排序的代码示例:

C语言

void sortStackUsingTempStack(Stack* stack) {     Stack* tempStack = initStack();     while (!isEmpty(stack)) {         int temp = pop(stack);         while (!isEmpty(tempStack) && getTop(tempStack) > temp) {             push(stack, pop(tempStack));         }         push(tempStack, temp);     }     while (!isEmpty(tempStack)) {         push(stack, pop(tempStack));     } } 

C#语言

public void SortStackUsingTempStack() {     Stack tempStack = new Stack();     while (!IsEmpty()) {         int temp = Pop();         while (!tempStack.IsEmpty() && tempStack.GetTop() > temp) {             Push(tempStack.Pop());         }         tempStack.Push(temp);     }     while (!tempStack.IsEmpty()) {         Push(tempStack.Pop());     } } 

C++语言

void sortStackUsingTempStack() {     Stack tempStack;     while (!isEmpty()) {         int temp = pop();         while (!tempStack.isEmpty() && tempStack.getTop() > temp) {             push(tempStack.pop());         }         tempStack.push(temp);     }     while (!tempStack.isEmpty()) {         push(tempStack.pop());     } } 

总结

本文详细介绍了栈的排序方法,包括递归法和辅助栈法,并提供了C, C#, C++三种语言的示例。递归法利用递归将栈顶元素出栈,然后重新插入到正确的位置;辅助栈法则利用一个额外的栈来辅助排序。这两种方法都可以实现栈的排序,但辅助栈法在实际应用中更为常见,因为它避免了递归可能带来的栈溢出问题。

相关内容

热门资讯

黑科技中牌率!德扑ai智能机器... 黑科技中牌率!德扑ai智能机器人,太实锤了本来是有挂(透视)德州论坛(2020已更新)(哔哩哔哩)德...
黑科技ai(pokermast... 黑科技ai(pokermaster)AAPOKeR一贯是有挂!太嚣张了其实真的有挂(2021已更新)...
黑科技模拟器(Wepoke辅助... 黑科技模拟器(Wepoke辅助)外挂透明挂辅助软件(透视)必胜教程(2022已更新)(哔哩哔哩);1...
黑科技真的!德州之星有透视挂吗... 黑科技真的!德州之星有透视挂吗,太离谱了都是是有挂(透视)揭秘攻略(2020已更新)(哔哩哔哩)1)...
黑科技软件(Wepoke游戏)... 自定义德州aa扑克系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是...
黑科技能赢(wepoke辅助透... 黑科技能赢(wepoke辅助透视)外挂透明挂辅助工具(透视)解密教程(2021已更新)(哔哩哔哩)1...
黑科技实锤!德州ai辅助外挂,... 黑科技实锤!德州ai辅助外挂,太嚣张了切实存在有挂(透视)扑克教程(2020已更新)(哔哩哔哩);1...
黑科技教程(Wepoke轻量版... 黑科技教程(Wepoke轻量版)WPk真是是真的有挂!太嚣张了先前是有挂(2025已更新)(哔哩哔哩...
黑科技系统(扑克世界)外挂透明... 黑科技系统(扑克世界)外挂透明挂辅助app(透视)规律教程(2026已更新)(哔哩哔哩);1、扑克世...
黑科技规律!wepoke辅助软... 黑科技规律!wepoke辅助软件靠谱吗,太坑了切实真的有挂(透视)必胜教程(2020已更新)(哔哩哔...