利用栈逆序元素

要求:利用栈将数组的元素逆序输出

分析:

       1.数组中的元素是线性排列

2.栈的特点是先进后出

解题思路:将数组中的元素依次压栈,再出栈。就能实现对数组元素的逆序

1.定义结构体

#define N 50

struct mystack {
    int top; //栈顶元素
    int data[N];
};
struct mystack selfStack={-1,{0}}; //初始栈为空

2.声明函数

int isEmpty();//判断栈是否为空  返回值:1-->空  0-->非空
void setEmpty();//设置栈为空
int push(int num);//压栈 返回值: 1-->压栈成功  0-->栈已满
int pop();//出栈  返回值: 1 -->出栈成功  —1 -->栈已空

3.实现函数

int isEmpty()
{
    if (selfStack.top == -1) {
        return 1;
    }else
    {
        return 0;
    }
}

void setEmpty()
{
    selfStack.top = -1;
}

int push(int num)
{
    if (selfStack.top == N-1) {//栈已满
        return 0;
    }else
    {
        selfStack.top += 1;
        selfStack.data[selfStack.top] = num;
        return 1;
    }
}

int pop()
{
    if (selfStack.top == -1) {
        return -1;
    }else
    {
        selfStack.top -= 1;
        return selfStack.data[selfStack.top+1];
    }
}

4.main函数中调用

void main()
{
    int a[10]= {1,2,3,4,5,6,7,8,9,10};
    for (int i = 0; i<10; i++) {
        push(a[i]);//将数组中的元素依次压栈
    }
    while (!isEmpty()) {
        printf("%d\n",pop());//出栈
    }

    system("pause");
}

5.输出情况

时间: 2024-10-13 02:20:48

利用栈逆序元素的相关文章

【算法题】03-使用递归和栈逆序一个栈

题目 仅用递归操作和栈逆序 一个栈. 一个栈依次压入1.2.3.4.5 那么从栈顶到栈底分别是5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能用递归来实现 ,不能用其他数据结构. 思路 需要两个递归函数 递归函数一:将栈stack的栈底元素返回并移除 /** * @Desc 获取栈底元素返回并移除 * @param stack * @return */ public static int getAndRemoveLastElement(St

用递归函数和栈逆序一个栈(C++)

题目:一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构.(并不是说代码中不能出现栈) 输入描述: 输入数据第一行一个整数N为栈中元素的个数.接下来一行N个整数表示从栈顶依次到栈底的每个元素. 输出描述: 输出一行表示栈中元素逆序后的每个元素 题目注意:1.用递归函数和栈来实现,不要忘了栈 #include <iostream> #include &

用递归函数和栈操作逆序栈

题目描述 一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构. 给定一个栈Stack以及栈的大小top,请返回逆序后的栈. 测试样例: [1,2,3,4,5],5 返回:[5,4,3,2,1] Solution 1:思路:第一步,将最上面的数出栈保存,然后将栈逆序(递归) 第二步,将第一步中出栈的数插入到栈的最底层(

&quot;Coding Interview Guide&quot; -- 仅用递归函数和栈操作逆序一个栈

[题目] 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能使用其它数据结构 [分析] 栈是一种操作受限的数据结构,只能从某一端进行插入和删除和访问元素.能进行插入删除和访问等操作的一端称为“栈顶”,相对的另一端,不能进行任何栈操作,称为栈底.栈中除了栈顶元素外,其它的栈元素都是不允许访问的.所以想要访问栈中其它元素,则只能将将栈中元素依次弹出直到该元素成为栈顶元素

O(1)时间复杂度逆序栈和排序栈

两种操作都是递归实现,汉诺塔思想. 1.逆序栈 void ReverseStack(Stack& stack) { if (stack.Count == 0) return; object top = stack.Pop(); ReverseStack(stack); if (stack.Count == 0) { stack.Push(top); return; } object top2 = stack.Pop(); ReverseStack(stack); //p1 stack.Push(

[Daily]仅用递归函数和栈操作逆序一个栈

[题目] 一个栈依次压入1,2,3,4,5:那么从栈顶到栈底分别为5,4,3,2,1..将栈转置 [要求] 只能用递归函数来实现. [分析] 该算法需要两个递归函数.分别是getAndRemoveLastElement()和Reverse() 函数名 描述 getAndRemoveLastElement 将栈Stack的栈底元素返回并移除.作为中间步骤被Reverse使用 Reverse 算法的入口.主要功能为将栈顶元素优先压入栈中(放在栈底) 关于getAndRemoveLastElement

【栈】仅用递归函数和栈操作逆序一个栈

题目: 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序.但是只能用递归函数来实现,不能用其他数据结构 题解: 需要两个递归函数:1. 将栈底元素返回并删除:2. 逆序一个栈 过程即为获取栈底元素,逆序2.3.4.5,递归后获取栈底元素2,逆序3.4.5,再次递归获取栈底元素3,逆序4.5,再次递归获取栈底元素4,逆序5,最后获取栈底元素5, 逆序空栈.依次返回插入获取的栈底元素,也就是依次插入

O(1) 空间复杂度逆序栈和排序栈

两种操作都是递归实现,汉诺塔思想. #include<iostream> #include<stack> using namespace std; void reverse(stack<int> &s)//逆序栈 { if(s.size()==0) return ; int a=s.top(); s.pop(); if(s.size()==0) { s.push(a); return ; } reverse(s); int b=s.top(); s.pop();

六道题 : 1.设计一个函数,用来计算b的n次方 2.(n! = 1*2*3*4*...n) 3.(1! + 2! + 3! + 4! + ... + n!) 4.成绩 5. 数组中的元素逆序存放 6.九九乘法口诀

/* 设计一个函数,用来计算b的n次方 递归的2个条件: 1.函数自己调用自己 2.必须有个明确的返回值 */ #include <stdio.h> int pow2(int b, int n); int main() { int c = pow2(3, 2); printf("%d\n", c); return 0; } /* pow2(b, 0) == 1 pow2(b, 1) == b == pow2(b, 0) * b pow2(b, 2) == b*b == po