使用C语言实现数据结构 - 栈



概述

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

栈的表示

Stack

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

基本操作

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

  • 入栈 (Push) − 将元素压入栈顶。

  • 出栈 (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.\n");
   }      
}

出栈操作

每当需要从栈中弹出元素时,栈会从存储区的顶部检索该元素,并减少顶部索引以供后续使用。

Pop Operation

// 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.\n");
   }      
}
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\n" ,peek());
   printf("Elements: \n");

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

输出

如果我们编译并运行上述程序,它将产生以下输出:

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