一个栈中的元素顺序插入另一个栈

#include
#include
#include
#define OK 1
#define ERROR 0
#define Stack_Size 20//定义栈最多能够存储的元素个数
typedef struct
{
int stacksize//当前已分配储存已使用空间
int *base//栈底指针
int *top;//整型变量top存储栈顶元素的下标,作为栈顶指针,top为-1时表示空栈
}SeqStack;

int InitStack(SeqStack );//初始化栈,即将一个栈清除为空
int StackEmpty(SeqStack *);//检查一个栈是否为空
int pop(SeqStack
,int*);//向一个栈中删除元素
int push(SeqStack , int);//向一个栈中插入元素
void Print(SeqStack
);//输出栈

int main()
{
SeqStack p = (SeqStack)malloc(sizeof(SeqStack)), q = (SeqStack)malloc(sizeof(SeqStack));
InitStack(p);
InitStack(q);
srand(time(NULL));
int i = 0, x, A[100];
cout << "随机生成100个要入栈的数字...." << endl;
while (i < 100)
{
cin.unget();
A[i] = rand() % 200;
Push(p, A[i++]);
}
cout << "打印第一个栈的内容:" << endl;
for (i = 0; i < p->sacksize; i++)
{
printf("%-4d", A[i]);
if ((i + 1) % 10 == 0)cout << endl;
}
system("pause");
cout << "打印第二个栈的内容:" << endl;
for (i = 0; p->sacksize != 0; i++)
{
Pop(p, &x);
Push(q, x);
printf("%-4d", x);
if ((i + 1) % 10 == 0)cout << endl;
}
system("pause");
}
int InitStack(SeqStack S)
{
s->base = (int
)malloc(Stack_Size * sizeof(int));
s->top = s->base;
s->sacksize = 0;
}
int StackEmpty(SeqStack *S)
{
return(s->top == s->base ? OK: ERROR);
}
int pop(SeqStack *S, int *x)
{
if (s->sacksize == 0)
return FALSE;
else
{
*x = *(--s->top);
*(s->top) = NULL;
s->sacksize--;
}
return TRUE;

}
int push(SeqStack *S, int x)
{
if (Stack_Size == s->sacksize)
return FALSE;
else
{
*(s->top++) = e;
s->sacksize++;
}
return TRUE;
}
void Print(SeqStack *S)
{
printf("输出元素:\n");
for (int i = S->top; i >=S->base; i--)
{
printf("%d", S->elem[i]);
}
printf("\n");
}

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
将栈S1中的元素复制到栈s2中,并保持顺序不变,使用额外的一个栈
将栈S1中的元素复制到栈s2中,并保持顺序不变,使用额外的一个栈
一个栈实现另一个栈的排序
使用C++完成《程序员代码面试指南 IT名企算法与数据结构题目》 题目 一个栈中元素的类型为整形,现在想将该栈按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构 解决 排序栈为myStack,辅助栈为helpStack,整体思想是把myStack的数据放入helpStack中,并且在helpStack中栈顶到栈底按照从小到大排列 - 对mySt...
C语言实现顺序栈及插入数据元素(一)
在翻看数据结构,栈和队列这一章的时候,书上使用ADT描述栈的顺序表示以及基本操作,本来以为用C实现起来很简单,但写具体代码时,还是遇到了很多问题,下面跟大家分享一下。 问题1:C语言调用函数时,实参通过值传递的方式对形参赋值,而书上采用了C++引用传递的方式来描述,这就让我这个初学者感到很困惑了,函数的形参和调用函数时实参应该怎样处理? 问题2:对栈进行初始化后,插入第一个数据元素,栈的长度增
利用栈将另一个已排序栈中元素反排序
题目: 有两个相同的栈,一个里面放着自大到小排列的数,栈顶的数最小,另一个栈是空的。不允许利用其它的数据结构,只能利用这两个栈,要求把第一个栈里的数字反过来,从小到大排列,结果还放在原来的那个栈里面。 #include #include #include using namespace std; stackstackA,stackB; int n; void reverse() {
栈Stack(一)--- 栈的顺序存储
在介绍双向队列接口(Deque)时,就拿栈(Stack)与它相比较,可以看出栈是只能在一头进行操作的一种数据结构。就栈而言 : 我们将进行插入和删除的一端叫做栈顶,相应地另一端也就是栈底。进栈与出栈: * 栈顶插入一个元素 --- 进栈   我们叫这个元素从栈顶被 “压入栈” -- push() * 栈顶删除一个元素 --- 出栈   我们叫这个元素从栈顶“弹出栈”   -- pop()原则   ...
数据结构之线性结构---栈 顺序储存
一、栈的特点栈是一种受限的线性表,它规定只能够在表的尾部进行插入和删除,我们把允许插入和删除元素的一端称为栈顶,而另一段称为栈底,没有任何元素的元素栈称为空栈。栈中的元素进出的规则为先入后出,即先进入栈的元素后出栈而后进入栈的元素先出栈。在对栈栈中的元素进行操作时只能够操作栈顶的元素。栈中储存元素的三种状态: 当储存的元素超过了栈的储存空间则会发生栈中元素的溢出。向栈中插入元素叫做入栈: t
Java基础 - 栈的顺序存储结构及实现
栈是一种数据结构,他代表只能在某一端进行插入、删除操作的特殊线性表,通常就是在线性表的尾端进行插入、删除操作。
Java中栈的实现(1)-使用顺序存储结构(数组)以及实现
栈和队列其实是与普通的线性发展而来的,为普通的线性表增加一些特殊的限制就可以得到栈和队列了。从功能上看,栈和队列比普通的线性表功能相对弱一点,但是在特殊的场合下,使用栈和队列更有利,例如,编译器在实现函数的调用的时候需要使用栈来存储断点,实现递归算法时候也需要用栈来存储。   栈:一种数据结构,代表只能从一端进行插入、删除操作的特殊线性表,通常情况下在栈的尾巴进行插入、删除操作。 对于栈而言
如何判断一个序列是否为另一个序列的出栈序列
借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向后移动一位,直到不相等,这样循环等压栈顺序遍历完成,如果辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。 举例: 入栈1,2,3,4,5 出栈4,5,3,2,1 首先1入辅助栈,
顺序栈/链式栈
        栈是是一种限定性的线性表,它将线性表的插入和删除限定为仅在表的一端进行。将表中允许插入和删除的一端成为栈顶。所以栈顶的位置是不断动态变化的。它具有“后进先出”的特点。因为栈是由线性表实现的,所以,栈有两种存储结构:顺序存储和链式存储。对应的栈成为顺序栈和链式栈。下面,分别来介绍这两种栈的相关操作。一,顺序栈        它与顺序表类似,即用一组地址连续的空间存放栈中的元素。之前的...
栈的创建、返回栈顶元素、删除栈顶元素、插入栈顶元素
#include #include #define STACK_INIT_SIZE 100//初始容量 #define STACKINCREMENT 10//每次增加的容量 typedef struct {     int *base;//栈底指针     int *top;//栈顶指针     int stacksize;//栈容量 }Sqstack; int InitS
利用一个栈倒序另外一个栈中的数
题目:有两个相同的栈A和B,在栈A中存放着从大到小的数:1,2,3,4,5,栈顶为最小数1,另外一个栈B为空的。现在要求不使用其他的数据结构,将栈A中的数字顺序倒过来,使其栈顶的数为最大值5。 #include #include #include using namespace std; template void ReverseOrder(stack&s1,stack&s2){ s1.
实现一个栈操作,将1~12月的英文单词压入栈中,然后再取出
栈(stack)可以是一个“后进先出”的数据结构,换言之,
数据结构之栈与队列的面试题:判断字符串是否按照出栈顺序
可能这个题目猛一看,并不知道题目要求是什么,让我们做什么。首先我们来说说这个题目大意。 给定一个字符串,如:a b d e c 一个栈的入栈顺序为:a b c d e 那么出栈顺序显而易见:e d c b a 题目意思为:字符串 a b d e c 是否能按出栈顺序所打出。比如说,我们先入栈a元素,接着再将a元素出栈,则得到a元素,接着再入b元素,同理出栈,再入c元素,发现与字符串d元素并...
C++ 使用一个栈实现另一个栈的排序
#include #include void print(std::stack &stk); void sort(std::stack &stack); int main() { std::stack stk;         //help 栈底存储数值比较大的, stk栈底存储比较小的 int arr[8] = { 2, 5, 1, 15, 19, 11,
栈的实现:顺序栈
栈(stack)是一种很常见的线性结构。它是只允许在一端进行插入和删除操作的线性表,这一端我们称为栈顶。栈的特点常被称为:先进后出(filo-first int last out),或者是后进先出(lifo-last in first out)。这个描述从它的操作特点可以看出,只许在一端进行插入,那么显然,先进的肯定后出。栈的应用,比如系统应用栈来实现递归,图的深度遍历使用了栈,递归要用到栈……。说到它的实现就有两种形式:顺序栈、链栈。其中以顺序栈最为常见。 栈的常见操作:
栈的顺序存储结构(C语言版)
我在准备的过程中,发现很多笔试题和面试的时候,都是用C语言来描述的,而且现在我的一些没有Java基础的师弟正在开始学习数据结构,所以为了方便他们也方便自己还是下定决心用C语言进行数据结构的代码实现,毕竟所有的语言都是相通的,学起来并不难,更何况我大一的时候学过呢,所以在此向一些希望看到我的Java版本实现的朋友道个歉。   栈的定义:限定仅在表尾进行插入和删除操作的线性表,我们把允许插入和...
判断元素入栈,出栈顺序的合法性
题目要求:元素出栈,入栈顺序的合法性。如入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)合法,入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,1,2)不合法。 定义一个栈s,入栈序列为stack_in,出栈序列为stack_out,长度分别为len_in和len_out。如果两个序列为空或长度不等,则不合法,出栈序列和入栈序列必须长度相等且不为空才能进
链栈基本操作
栈基本概念: 栈(stack)是限定在表尾进行插入和删除操作的线性表(或单链表)。 //只能在一段进行插入和删除,因此不存在,在中间进行插入 栈顶(top):允许插入和删除的一端。而另一端称为栈底(bottom) 空栈:不含任何数据元素的栈。 后进先出两个基本操作: 栈的插入操作(push),叫做进栈,或压栈,或入栈 删除操作(pop),叫做出栈,或弹栈 注意链栈next指针的指向,
用一个栈实现另一个栈的排序(java实现)
一、题目    一个栈中元素的类型为整形,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈,除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序? 二、解答     将要排序的栈记为stack,申请的辅助栈记为help。在stack上执行pop操作,弹出的元素记为cur。    (1)如果cur小于或等于help的栈顶元素,则将cur直接压入help;     (2)如果cu...
数据结构 创建栈 压栈 删除栈顶元素 清空栈 遍历栈 例子
本例子讲述了如何创建一个栈,压栈即往栈里插入一个结点,删除栈顶元素,以及对栈里的结点进行清空,遍历栈里的结点 #include #include #include #include typedef struct Node { int data; //数据域 struct Node *pNext; //指针域 }NODE, *PNODE; typedef str
【数据结构】C++实现顺序栈
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。
数据结构--栈的构造、插入、删除、得到栈顶元素操作
*非空栈中的栈顶指针始终在栈顶元素的下一个位置; *top为栈顶指针其初值指向栈底,即top = base 可作为栈空的标记插入新的栈顶元素,指针top增1;删除栈顶元素时指针top减1;#include<iostream> #include<stdlib.h> # define STACK_INIT_SIZE 100 # define STACKINCREMENT 10 # define Ele
栈的基本操作的实现(初始化、赋值、取值、插入、删除等)顺序存储结构
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #define maxsize 64 typedef int datatype; //定义结构体 typedef struct { datatype data[maxsize]; int top; } seqstack; //建立顺序栈 seqstack *SET(seqstack *s...
栈和队列的插入、删除、获取头尾元素操作
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈又称为后进先出的线性表。 Stack.h #pragma once #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;assert.h&amp;gt; #include&amp;lt;Windows.h&amp;gt; typedef int DataType; ...
栈 - 关于出栈序列,判断合法的出栈序列
前言: (例)设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( )。 A. 1 2 4 3 B. 2 1 3 4 C. 1 4 3 2 D. 4 3 1 2 E. 3 2 1 4 一般人看到此类题目,都会拿起草稿纸,将各个选项都模拟一遍选出正确答案 这当然可以得出正确的答案 (D ) 但是这个例题中操作元素只有 4 个,当操作元素有10个呢?
关于一个栈的输入顺序是a,b,c,d,e则下列序列中不可能是出栈顺序
经常在笔试的时候会看见这样类似的笔试题,就是关于一个栈的输入顺序是a,b,c,d,e则下列序列中不可能是出栈顺序.很多人都知道栈是先进后出,但是还是做好这道题. 以一道题目为例给大家讲讲这道题目应该怎么做: 题目:一个栈的输入顺序是a,b,c,d,e则下列序列中不可能是出栈顺序是() A:e,d,a,c,b B:a,e,d,c,b C:b,c,d,a,e D:b,c,a,d,e 解答
[数据结构]c语言实现顺序栈的入栈,出栈,清空,销毁等操作
/* 顺序栈 栈的抽象数据类型 ADT 栈(stack) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系 Operation InitStack(*S):初始化操作,建立一个空栈S DestroyStack(*S):若栈存在,则销毁它 ClearStack(*S):将栈清空 StackEmpty(S):若栈为空,返回true,否则返回fal
栈的顺序表示与实现(C++版)
栈的定义:栈,也称为堆栈,他是
输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。 为了简单起见,我们假设push 序列的任意两个整数都是不相等的。 比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列,但序列4、3、5、1、2 就不可能是push 序列1、2、3、4、5 的pop 序列。 思路: 1.首先新建一个栈模拟入栈入栈
栈的一些习题
1.栈和队列具有相同的(    )。 A.抽象数据类型     B.逻辑结构     C.存储结构     D.运算 2.栈是()。 A.顺序存储的线性结构     B.链式存储的非线性结构 C.限制存取点的线性结构     D.限制存储点的非线性结构 3.()不是栈的基本操作。 A.删除栈顶元素     B.删除栈底元素 C.判断栈是否为空     D.将栈置为空栈
c++实现栈建立,插入,删除
# include using namespace std; #define STACK_INIT_SIZE 10 #define STACKINCREMENT 5 typedef int SElemType; //定义栈结构 typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; //建立栈
数据结构的栈的基本操作C语言实现
本代码对如何构建一个空栈,然后再向栈中插入元素,删除元素,并将栈的元素输出
给定一个入栈顺序,输出所有的出栈顺序
废话少说,先上代码: import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); /*输入入栈元素的个数*/
反转栈或队列中的元素
(一)Implement Stack using Queues 题目:用队列的方式实现栈的操作; 解答:用两个队列的方式实现; 优化:使用一个队列,但是在push操作时,注意将元素顺序反转:              public void push(int x) {                    queue1.offer(x);                    for
颠倒栈中元素--栈的逆置
思路: 1.使用递归pop出栈中元素,直到栈中元素只剩下一个元素 2.当前第一次递归返回的时候,栈中有2个元素,我们再利用另一个递归函数putItem把两个元素逆置 3.以此递归下去,直到栈中元素全部逆置。 过程如下 1)1 , 2, 3, 4 第一个递归不断出栈,第一次满足返回条件时,栈中元素只有 1 2)回到第一个递归的上一层,利用putItem把 2 压入栈中,当putItem返
数据结构之栈的顺序表示及其实现
记录一下自己学习过程中写的代码。以下是我看严蔚敏老师的数据结构教材后,结合教材所讲用C语言实现了关于栈的顺序表示及其实现的基本操作,供以后复习所用。本程序建立的栈是一个顺序栈,即该栈是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针Top指示栈顶元素在顺序栈中的位置。具体做法是,先给栈分配一个基本容量,然后在应用过程中个,当栈的空间不够使用时再逐渐扩大。在初始化栈的时候,按照设定的初始分配量进行第一次存储分配,Bottom是栈底指针,在本栈中,它始终指向栈底的位置,若其值为NULL,则
顺序表实现栈的操作
顺序表实现栈的操作 栈的定义 百度的解释是: 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 自己理解的话,栈就像...
栈的插入 删除
栈:只能在表尾进行插入和删除操作,也是线性表。栈元素先进后出,最先进栈的只能在栈底,栈的插入称为:进栈、入栈,删除称为:出栈或弹栈。 顺序栈:以数组0下标为栈底。top记录栈底元素在数组中的位置,是变化的,top
元素出栈、入栈顺序的合法性。如入栈的序列(1, 2, 3, 4, 5),出栈序列为(4, 5, 3, 2, 1)
#pragma once #include&quot;Stack.h&quot; int checkstackisright(int* in, int* out ,int sz) { Stack s; int inIndex, outIndex; inIndex = outIndex = 0; StackInit(&amp;amp;s, 10); while (inIndex &amp;lt;...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 全栈开发工程师 web全栈