C语言编程中的堆栈
时间:2020-02-23 14:32:06 来源:igfitidea点击:
堆栈是线性数据结构,包含相同类型的项目。
堆栈遵循后进先出(LIFO)的方式,其中最后输入的元素是要弹出的第一个元素。
在堆栈中,元素的插入和删除仅发生在其一个端点。
1.在堆栈上执行的操作
以下是堆栈所服务的基本操作。
推送:此功能将元素添加到堆栈顶部。
弹出:此函数从堆栈中删除最顶层的元素。
IsEmpty:检查堆栈是否为空。
IsFull:检查堆栈是否已满。
顶部:显示堆栈的最顶部元素。
2.栈的工作
最初,我们设置一个指针Peek/Top来跟踪堆栈中最顶层的项目。
初始化堆栈为-1。
然后,我们通过比较Peek与-1来检查堆栈是否为空,即Top == -1
当我们将元素添加到堆栈中时,Peek元素的位置每次都会更新。
一旦我们从一组输入中弹出或者删除一个项目,最顶层的元素就会被删除,因此Peek/Top的值会减少。
3.在C中实现Stack
堆栈可以使用结构,指针,数组或者链表表示。
其中我们使用C语言中的数组实现了堆栈。
#include<stdio.h> #include<stdlib.h> #define Size 4 int Top=-1, inp_array[Size]; void Push(); void Pop(); void show(); int main() { int choice; while(1) { printf("\nOperations performed by Stack"); printf("\n1.Push the element\n2.Pop the element\n3.Show\n4.End"); printf("\n\nEnter the choice:"); scanf("%d",&choice); switch(choice) { case 1: Push(); break; case 2: Pop(); break; case 3: show(); break; case 4: exit(0); default: printf("\nInvalid choice!!"); } } } void Push() { int x; if(Top==Size-1) { printf("\nOverflow!!"); } else { printf("\nEnter element to be inserted to the stack:"); scanf("%d",&x); Top=Top+1; inp_array[Top]=x; } } void Pop() { if(Top==-1) { printf("\nUnderflow!!"); } else { printf("\nPopped element: %d",inp_array[Top]); Top=Top-1; } } void show() { if(Top==-1) { printf("\nUnderflow!!"); } else { printf("\nElements present in the stack: \n"); for(int i=Top;i>=0;--i) printf("%d\n",inp_array[i]); } }
输出:
Operations performed by Stack 1.Push the element 2.Pop the element 3.Show 4.End Enter the choice:1 Enter element to be inserted to the stack:10 Operations performed by Stack 1.Push the element 2.Pop the element 3.Show 4.End Enter the choice:3 Elements present in the stack: 10 Operations performed by Stack 1.Push the element 2.Pop the element 3.Show 4.End Enter the choice:2 Popped element: 10 Operations performed by Stack 1.Push the element 2.Pop the element 3.Show 4.End Enter the choice:3 Underflow!!
4.堆栈操作的时间复杂度
如上所述,堆栈中一次只能访问一个元素。
在堆栈上执行push()和pop()操作时,需要O(1)时间。