php 数组堆栈,数组实现堆栈

在数组实现中,通过使用数组形成堆栈。 关于堆栈的所有操作都是使用数组执行的。 下面来看看如何使用数组数据结构在堆栈上实现每个操作。

1. 在堆栈中添加元素(推送操作)

将元素添加到堆栈顶部称为推送操作。推送操作包括以下两个步骤。

增加变量top,使其现在可以引用到下一个内存位置。

在顶部位置添加元素,这个操作称为在堆栈顶部添加新元素。

当尝试将一个元素插入一个完全填充的堆栈时,堆栈溢出,因此,main()函数必须始终避免堆栈溢出条件。

算法

开始 if top = n 那么堆栈满 top = top + 1 stack (top) : = item; 结束

时间复杂度为:o(1)

C语言中推送算法的实现 –

void push (int val,int n) //n is size of the stack { if (top == n ){ printf("Overflown"); }else { top = top + 1; stack[top] = val; } }

2. 从堆栈中删除元素(弹出操作)

从堆栈顶部删除元素称为弹出操作。 每当从堆栈中删除一个项目时,变量top的值将增加1。 堆栈的最顶层元素存储在另一个变量中,然后顶部递减1。该操作返回作为结果存储在另一个变量中的已删除值。

当尝试从已经空的堆栈中删除元素时,会发生下溢情况。

算法

开始 if top = 0 那么堆栈为空; item := stack(top); top = top ? 1; 结束

时间复杂度为:o(1)

使用C语言实现弹出算法

int pop () { if(top == -1) { printf("Underflow"); return 0; } else { return stack[top -- ]; } }

3. 访问堆栈的每个元素(Peek操作)

Peek操作涉及返回堆栈顶部存在的元素但不删除它。如果尝试返回已经空堆栈中的顶部元素,则可能发生下溢情况。

算法:

开始 if top = -1 那么堆栈 item = stack[top] return item 结束

时间复杂度为:o(1)

用C语言实现Peek算法

int peek() { if (top == -1) { printf("Underflow"); return 0; } else { return stack [top]; } }

完整的C语言实现代码 –

#include int stack[100], i, j, choice = 0, n, top = -1; void push(); void pop(); void show(); void main() { printf("Enter the number of elements in the stack "); scanf("%d", &n); printf("*********Stack operations using array*********"); printf("----------------------------------------------n"); while (choice != 4) { printf("Chose one from the below options...n"); printf("1.Pushn2.Popn3.Shown4.Exit"); printf("Enter your choice n"); scanf("%d", &choice); switch (choice) { case 1: { push(); break; } case 2: { pop(); break; } case 3: { show(); break; } case 4: { printf("Exiting...."); break; } default: { printf("Please Enter valid choice "); } }; } } void push() { int val; if (top == n) printf("Overflow"); else { printf("Enter the value?"); scanf("%d", &val); top = top + 1; stack[top] = val; } } void pop() { if (top == -1) printf("Underflow"); else top = top - 1; } void show() { for (i = top;i >= 0;i--) { printf("%dn", stack[i]); } if (top == -1) { printf("Stack is empty"); } }

完整的Java语言实现代码 –

import java.util.Scanner; class Stack { int top; int maxsize = 10; int[] arr = new int[maxsize]; boolean isEmpty() { return (top < 0); } Stack() { top = -1; } boolean push(Scanner sc) { if (top == maxsize - 1) { System.out.println("Overflow !!"); return false; } else { System.out.println("Enter Value"); int val = sc.nextInt(); top++; arr[top] = val; System.out.println("Item pushed"); return true; } } boolean pop() { if (top == -1) { System.out.println("Underflow !!"); return false; } else { top--; System.out.println("Item popped"); return true; } } void display() { System.out.println("Printing stack elements ....."); for (int i = top; i >= 0; i--) { System.out.println(arr[i]); } } } public class Stack_Operations { public static void main(String[] args) { int choice = 0; Scanner sc = new Scanner(System.in); Stack s = new Stack(); System.out.println("*********Stack operations using array*********n"); System.out.println("------------------------------------------------n"); while (choice != 4) { System.out.println("Chose one from the below options...n"); System.out.println("1.Pushn2.Popn3.Shown4.Exit"); System.out.println("Enter your choice n"); choice = sc.nextInt(); switch (choice) { case 1: { s.push(sc); break; } case 2: { s.pop(); break; } case 3: { s.display(); break; } case 4: { System.out.println("Exiting...."); System.exit(0); break; } default: { System.out.println("Please Enter valid choice "); } } ; } } }

完整的C#语言实现代码 –

using System; public class Stack { int top; int maxsize=10; int[] arr = new int[10]; public static void Main() { Stack st = new Stack(); st.top=-1; int choice=0; Console.WriteLine("*********Stack operations using array*********"); Console.WriteLine("----------------------------------------------n"); while(choice != 4) { Console.WriteLine("Chose one from the below options...n"); Console.WriteLine("1.Pushn2.Popn3.Shown4.Exit"); Console.WriteLine("Enter your choice n"); choice = Convert.ToInt32(Console.ReadLine()); switch(choice) { case 1: { st.push(); break; } case 2: { st.pop(); break; } case 3: { st.show(); break; } case 4: { Console.WriteLine("Exiting...."); break; } default: { Console.WriteLine("Please Enter valid choice "); break; } }; } } Boolean push () { int val; if(top == maxsize-1) { Console.WriteLine("Overflow"); return false; } else { Console.WriteLine("Enter the value?"); val = Convert.ToInt32(Console.ReadLine()); top = top +1; arr[top] = val; Console.WriteLine("Item pushed"); return true; } } Boolean pop () { if (top == -1) { Console.WriteLine("Underflow"); return false; } else { top = top -1; Console.WriteLine("Item popped"); return true; } } void show() { for (int i=top;i>=0;i--) { Console.WriteLine(arr[i]); } if(top == -1) { Console.WriteLine("Stack is empty"); } } }

¥ 我要打赏   纠错/补充 收藏

: :

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值