使用 C 的 DSA - 堆栈

概述

堆栈是一种数据结构,它只允许在一端对数据进行操作。它只允许访问最后插入的数据。堆栈也称为 LIFO(后进先出)数据结构,推送和弹出操作以这样的方式相关:只有最后推送(添加到堆栈)的项目才能弹出(从堆栈中删除)。

堆栈表示

Stack

我们将在本文中使用数组实现堆栈。

基本操作

以下是堆栈的两个主要操作。

  • 推送 −将元素推送到堆栈顶部。

  • Pop − 从堆栈顶部弹出一个元素。

堆栈支持以下几个操作。

  • Peek − 获取堆栈顶部元素。

  • isFull − 检查堆栈是否已满。

  • isEmpty − 检查堆栈是否为空。

推送操作

每当将元素推送到堆栈时,堆栈都会将该元素存储在存储顶部并增加顶部索引以供以后使用。如果存储已满,通常会显示错误消息。

Stack Push

// Operation : Push
// push item on the top of the stack 
void push(int data) {
   if(!isFull()){
      // increment top by 1 and insert data 
      intArray[++top] = data;
   } else {
      printf("Cannot add data. Stack is full.
");
   }      
}

弹出操作

每当要从堆栈中弹出一个元素时,堆栈都会从存储顶部检索该元素并减少顶部索引以供以后使用。

弹出操作

// Operation : Pop
// pop item from the top of the stack 
int pop() {
   //retrieve data and decrement the top by 1
   return intArray[top--];        
}

示例

StackDemo.c

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

// size of the stack
int size = 8;       

// stack storage
int intArray[8];     

// top of the stack
int top = -1;            

// Operation : Pop
// pop item from the top of the stack 
int pop() {
   //retrieve data and decrement the top by 1
   return intArray[top--];        
}
// Operation : Peek
// view the data at top of the stack 
int peek() {       
   //retrieve data from the top
   return intArray[top];
}
//Operation : isFull
//return true if stack is full 
bool isFull(){
   return (top == size-1);
}

// Operation : isEmpty
// return true if stack is empty 
bool isEmpty(){
   return (top == -1);
}
// Operation : Push
// push item on the top of the stack 
void push(int data) {
   if(!isFull()){
      // increment top by 1 and insert data 
      intArray[++top] = data;
   } else {
      printf("Cannot add data. Stack is full.
");
   }      
}
main() {
   // push items on to the stack 
   push(3);
   push(5);
   push(9);
   push(1);
   push(12);
   push(15);

   printf("Element at top of the stack: %d
" ,peek());
   printf("Elements: 
");

   // print stack data 
   while(!isEmpty()){
      int data = pop();
      printf("%d
",data);
   }
   printf("Stack full: %s
" , isFull()?"true":"false");
   printf("Stack empty: %s
" , isEmpty()?"true":"false");
}

输出

如果我们编译并运行上述程序,则会产生以下输出 −

Element at top of the stack: 15
Elements: 
15
12
1
9
5
3
Stack full: false
Stack empty: true