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

#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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
一个栈实现另一个栈的排序
使用C++完成《程序员代码面试指南 IT名企算法与数据结构题目》 题目 一个栈中元素的类型为整形,现在想将该栈按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构 解决 排序栈为myStack,辅助栈为helpStack,整体思想是把myStack的数据放入helpStack中,并且在helpStack中栈顶到栈底按照从小到大排列 - 对mySt...
将栈S1中的元素复制到栈s2中,并保持顺序不变,使用额外的一个栈
将栈S1中的元素复制到栈s2中,并保持顺序不变,使用额外的一个栈
C语言实现顺序栈及插入数据元素(一)
在翻看数据结构,栈和队列这一章的时候,书上使用ADT描述栈的顺序表示以及基本操作,本来以为用C实现起来很简单,但写具体代码时,还是遇到了很多问题,下面跟大家分享一下。 问题1:C语言调用函数时,实参通过值传递的方式对形参赋值,而书上采用了C++引用传递的方式来描述,这就让我这个初学者感到很困惑了,函数的形参和调用函数时实参应该怎样处理? 问题2:对栈进行初始化后,插入第一个数据元素,栈的长度增
<仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。   比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。 因为可以有如下的push和pop序列: push 1,push 2,push 3,push 4,pop,push 5,pop,po
数据结构之线性结构---栈 顺序储存
一、栈的特点栈是一种受限的线性表,它规定只能够在表的尾部进行插入和删除,我们把允许插入和删除元素的一端称为栈顶,而另一段称为栈底,没有任何元素的元素栈称为空栈。栈中的元素进出的规则为先入后出,即先进入栈的元素后出栈而后进入栈的元素先出栈。在对栈栈中的元素进行操作时只能够操作栈顶的元素。栈中储存元素的三种状态: 当储存的元素超过了栈的储存空间则会发生栈中元素的溢出。向栈中插入元素叫做入栈: t
如何判断一个序列是否为另一个序列的出栈序列
借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向后移动一位,直到不相等,这样循环等压栈顺序遍历完成,如果辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。 举例: 入栈1,2,3,4,5 出栈4,5,3,2,1 首先1入辅助栈,
数据结构之栈的顺序表示及其实现
记录一下自己学习过程中写的代码。以下是我看严蔚敏老师的数据结构教材后,结合教材所讲用C语言实现了关于栈的顺序表示及其实现的基本操作,供以后复习所用。本程序建立的栈是一个顺序栈,即该栈是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针Top指示栈顶元素在顺序栈中的位置。具体做法是,先给栈分配一个基本容量,然后在应用过程中个,当栈的空间不够使用时再逐渐扩大。在初始化栈的时候,按照设定的初始分配量进行第一次存储分配,Bottom是栈底指针,在本栈中,它始终指向栈底的位置,若其值为NULL,则
用一个栈实现另一个栈的排序(java实现)
一、题目    一个栈中元素的类型为整形,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈,除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序? 二、解答     将要排序的栈记为stack,申请的辅助栈记为help。在stack上执行pop操作,弹出的元素记为cur。    (1)如果cur小于或等于help的栈顶元素,则将cur直接压入help;     (2)如果cu...
Java基础 - 栈的顺序存储结构及实现
栈是一种数据结构,他代表只能在某一端进行插入、删除操作的特殊线性表,通常就是在线性表的尾端进行插入、删除操作。
栈和队列的插入、删除、获取头尾元素操作
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈又称为后进先出的线性表。 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; ...
栈的实现:顺序栈
栈(stack)是一种很常见的线性结构。它是只允许在一端进行插入和删除操作的线性表,这一端我们称为栈顶。栈的特点常被称为:先进后出(filo-first int last out),或者是后进先出(lifo-last in first out)。这个描述从它的操作特点可以看出,只许在一端进行插入,那么显然,先进的肯定后出。栈的应用,比如系统应用栈来实现递归,图的深度遍历使用了栈,递归要用到栈……。说到它的实现就有两种形式:顺序栈、链栈。其中以顺序栈最为常见。 栈的常见操作:
【数据结构】C++实现顺序栈
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。
判断元素入栈,出栈顺序的合法性
题目要求:元素出栈,入栈顺序的合法性。如入栈的序列(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。如果两个序列为空或长度不等,则不合法,出栈序列和入栈序列必须长度相等且不为空才能进
栈的一些习题
1.栈和队列具有相同的(    )。 A.抽象数据类型     B.逻辑结构     C.存储结构     D.运算 2.栈是()。 A.顺序存储的线性结构     B.链式存储的非线性结构 C.限制存取点的线性结构     D.限制存储点的非线性结构 3.()不是栈的基本操作。 A.删除栈顶元素     B.删除栈底元素 C.判断栈是否为空     D.将栈置为空栈
C++,类的构造与析构函数,进栈出栈 以及堆上的执行 顺序 语法练习
#include #include using namespace std; class Student { public: // 存 void setname(string s){ name = s;} void setage(int y){age = y; } void setaddress(string add){address = add;}
数据结构--栈的构造、插入、删除、得到栈顶元素操作
*非空栈中的栈顶指针始终在栈顶元素的下一个位置; *top为栈顶指针其初值指向栈底,即top = base 可作为栈空的标记插入新的栈顶元素,指针top增1;删除栈顶元素时指针top减1;#include<iostream> #include<stdlib.h> # define STACK_INIT_SIZE 100 # define STACKINCREMENT 10 # define Ele
线性表、栈、队列等查找、删除、插入的时间复杂度O()
线性表: 顺序存储结构(用一段连续地址存储) 存、读第i个位置元素,O(1) 插入/删除:O(n),从插入/删除位置到最后一个元素都要向前/后移动一个位置。 链式存储结构(数据域+指针域) 单链表:读取O(n)              插入/删除O(n)——不清楚第i个元素指针位置时,但是已知时为O(1),对于频繁插入/删除有效率优势 静态链表(用数组描述,由两个数据域组成,d
【栈】C++栈的建立、初始化、插入、删除
栈是限定在尾部进行插入或删除的线性表。表尾称为栈顶(top),表头称为栈底(base)。栈的修改按照后进先出的原则。 栈有两种存储表示方法:顺序栈和链栈。顺序栈是利用一组连续存储单元依次存放栈底到栈顶数据元素的位置。链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。 注意: 1.如果在函数中需要修改形参,而且希望函数结束后变量修改生效,可以使用引用的方法。例如把栈顶元素传
栈的插入 删除
栈:只能在表尾进行插入和删除操作,也是线性表。栈元素先进后出,最先进栈的只能在栈底,栈的插入称为:进栈、入栈,删除称为:出栈或弹栈。 顺序栈:以数组0下标为栈底。top记录栈底元素在数组中的位置,是变化的,top
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; //建立栈
Java中栈的实现(1)-使用顺序存储结构(数组)以及实现
栈和队列其实是与普通的线性发展而来的,为普通的线性表增加一些特殊的限制就可以得到栈和队列了。从功能上看,栈和队列比普通的线性表功能相对弱一点,但是在特殊的场合下,使用栈和队列更有利,例如,编译器在实现函数的调用的时候需要使用栈来存储断点,实现递归算法时候也需要用栈来存储。   栈:一种数据结构,代表只能从一端进行插入、删除操作的特殊线性表,通常情况下在栈的尾巴进行插入、删除操作。 对于栈而言
求栈的出栈方式的个数和打印出栈顺序
本文分析了无重复入栈序列对应的出栈顺序的个数,给出解决出栈顺序的算法,并编程打印出所有出栈顺序
栈的基本操作(一)
1.栈的基本概念栈是一种只能在一端进行插入或删除操作的线性表。其中允许进行插入或删除操作的一端称为(Top),栈顶由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是记录栈顶元素在数组位置标号的一个整型变量;对于链式栈,就是记录栈顶元素所在结点地址的指针)来指示,它是动态变化的。表的另一端称为栈底,栈底是固定不变的。栈的插入和操作一般称为入栈和出栈。本篇文章以顺序栈为主。栈的特点先进先
输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。 因为可以有如下的push和pop序列: push 1,push 2,push 3,push 4,pop,push 5,pop,po
颠倒栈中元素--栈的逆置
思路: 1.使用递归pop出栈中元素,直到栈中元素只剩下一个元素 2.当前第一次递归返回的时候,栈中有2个元素,我们再利用另一个递归函数putItem把两个元素逆置 3.以此递归下去,直到栈中元素全部逆置。 过程如下 1)1 , 2, 3, 4 第一个递归不断出栈,第一次满足返回条件时,栈中元素只有 1 2)回到第一个递归的上一层,利用putItem把 2 压入栈中,当putItem返
数据结构之栈的基本概念
栈的基本概念 栈是限定只能在表尾(栈顶)进行插入和删除操作的线性表, 所以栈又称为后进先出(LIFO)的线性表. 典型的栈结构如图: 重要概念: 入栈 push: 入栈也称压栈, 指的是栈的插入操作, 在栈顶位置插入新的数据元素. 出栈 pop: 出栈也称弹栈, 指的是栈的删除操作, 删除栈顶位置的数据元素 栈的抽象数据类型 ADT stack Data 每个数据元素...
顺序栈的输入与输出
#include #include #include typedef int Status; typedef int SElemType; #define STACK_INIT_SIZE 100 #define STACKINCREMENT 20 #define OVERFLOW -2 #define OK 1 #define ERROR 0 typedef struct SqStac
求栈的容量(从出队的顺序可以得到入栈和出栈的顺序)
从出队的顺序可以得到入栈和出栈的顺序 栈和队列,ABCDEF分别入栈,且出栈后及入队列。出队的顺序是BDCFEA,问栈的容量至少为? 栈是先进后出,队列是先进先出。从出队的顺序可以得到入栈和出栈的顺序:A入栈-B入栈-B出栈-C入栈-D入栈-D出栈-C出栈-E入栈-F入栈-F出栈-E出栈-A出栈。从中可以看出栈中元素最多的时候有3个,所以栈的容量至少要为3。 设栈
【面试题】实现一个栈要求Push,Pop,Min(返回栈中最小值的操作)的时间复杂度为O(1)
思路: 用两个栈来实现,栈sData存放入栈元素,栈sMin存放最小值。 按照元素入栈顺序,将要入栈的第一个元素,同时压入两个栈中。后续每个元素入栈时,与sMin栈中栈顶元素比较大小,若入栈元素data 小于sMin栈顶元素,则把data同时压入两个栈中,若data大于sMin栈中栈顶元素,则只压入栈sData中。出栈时,判断两个栈顶元素是否相等,若相等则两个栈同时执行出栈操作,不相等
顺序栈/链式栈
        栈是是一种限定性的线性表,它将线性表的插入和删除限定为仅在表的一端进行。将表中允许插入和删除的一端成为栈顶。所以栈顶的位置是不断动态变化的。它具有“后进先出”的特点。因为栈是由线性表实现的,所以,栈有两种存储结构:顺序存储和链式存储。对应的栈成为顺序栈和链式栈。下面,分别来介绍这两种栈的相关操作。一,顺序栈        它与顺序表类似,即用一组地址连续的空间存放栈中的元素。之前的...
数据结构的栈的基本操作C语言实现
本代码对如何构建一个空栈,然后再向栈中插入元素,删除元素,并将栈的元素输出
反转栈或队列中的元素
(一)Implement Stack using Queues 题目:用队列的方式实现栈的操作; 解答:用两个队列的方式实现; 优化:使用一个队列,但是在push操作时,注意将元素顺序反转:              public void push(int x) {                    queue1.offer(x);                    for
数据结构栈与队列题库
网络课课后题 1、设栈S 和队列Q 的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6 个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是   3 解析:不难,在本子上写写画画就行 2、双端队列可以在队列的两端进行插入和删除操作,既可在队尾进行插入/删除,又可在队头进行插入/删除。现有4个不同的元素顺序输入到双端队列...
顺序表实现栈的操作
顺序表实现栈的操作 栈的定义 百度的解释是: 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 自己理解的话,栈就像...
C++实现栈中元素排序
题目:将一个栈中的元素排序,借助另外一个栈!思路:将排序的栈每次出栈一个元素,第一次直接放入缓冲栈中,第二开始直至结束,每个出栈元素都需要跟缓冲栈里面元素比较找到排序位置(缓冲栈这个时候也需要吐栈可以考虑把元素放回到排序栈中待会再放回来),直到所有元素排序完毕。#include <iostream> #include <stack> void sortStack(stack<int>& a) {
链栈基本操作
栈基本概念: 栈(stack)是限定在表尾进行插入和删除操作的线性表(或单链表)。 //只能在一段进行插入和删除,因此不存在,在中间进行插入 栈顶(top):允许插入和删除的一端。而另一端称为栈底(bottom) 空栈:不含任何数据元素的栈。 后进先出两个基本操作: 栈的插入操作(push),叫做进栈,或压栈,或入栈 删除操作(pop),叫做出栈,或弹栈 注意链栈next指针的指向,
建立数据元素为字符型的顺序栈(C语言版)
#include #include #include #include #include #define ElemType char #define INIT_SIZE 100//即栈的最大长度,以元素为单位 #define INCREMENT 10//存储分配增量 //顺序栈的数据结构 typedef struct SNode { ElemType *base;//在
【学习点滴-数据结构-栈&队列】 颠倒一个栈。
题目描述:对于一个非空栈,请设计一个算法颠倒栈中的元素。 首先我们设计的栈的实现代码是: /* * 问题描述:栈实现的基本代码。 * @author : xiaoq-ohmygirl * @time : 2012-07-03 **/ #include #include #include #include //栈的初始最大容量 #define STACK_M
【数据结构】堆栈(顺序栈、链栈)的JAVA代码实现
堆栈(stack)是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入和删除操作的一端称为栈顶,最下面的那一端称为栈底。栈顶是动态的,它由一个称为栈顶指针的位置指示器指示。当栈中没有数据元素时,为空栈。堆栈的插入操作称为进栈或入栈,堆栈的删除操作称为出栈或退栈。 栈的主要特点是“后进先出”,即后进栈的元素先被处理。因此,栈又被称为后进先出(last in fir...
【栈】用一个栈来实现另一个栈的排序
【题目描述】     在一个栈中元素的类型为整型,现在想将该栈从栈顶到栈底按从大到小的顺序排序,只许申请一个栈,除此之外,可以申请其他变量,但是不能申请额外的数据结构,如何完成排序 【我的代码】 /** * 用一个栈实现另一个栈的排序 * @param stack */ public static void sortStackByStack(Stack stack){
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 ios获取idfa server的安全控制模型是什么 sql android title搜索 java输入一个班的成绩 全栈web