【数据结构之旅】顺序栈入门操作

说明:

    书中已有关于顺序栈的类型定义、栈初始化、入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作。


1.程序功能

    通过使用栈来编写一个程序,实现两个数的交换。


2.程序代码及注释

    代码及注释如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#include<stdio.h>

#include<stdlib.h>    //导入stdlib.h模块是为了使用sizeof函数

 

typedef struct{        //定义栈Stack的类型

    int *base;

    int top;

    int stack_size;

}   Stack;

 

int InitStack(Stack &S, int size){   //初始化栈

    S.base = (int *)malloc(size * sizeof(int));  //开辟一段地址,并把首地址赋给S.base

    if(S.base == NULL) return 0;    //如果地址开辟失败,就返回0

    S.top = 0;    //S.top为0,表示此时栈为空栈

    S.stack_size = size;    //记录栈的大小,这里为可以存放size个int类型的数据

    return 1;    //初始化栈成功,返回1

}

 

int Push(Stack &S, int e){    //入栈操作

    S.base[S.top] = e;    //此时S.top为0,让S.base地址块的首地址存放数据e

    S.top++;              //让S.top指向下一个开辟的地址

    return 1;            //数据入栈成功,返回1

}

 

int Pop(Stack &S){              //出栈操作

    if(S.top == 0)          //S.top为0,表示指向栈的开始,即数据已全部出栈

        return 0;

    S.top--;                //未全部出栈,让S.top减1,使S.base可以指向前1个数据

    return S.base[S.top];   //返回数据

}

 

int exchange(int x, int y){

    Stack S;            //定义一个新栈(本质为结构体)

    InitStack(S, 3);    //初始化栈,并且栈的大小为3

    Push(S, x);         //把x压入栈

    Push(S, y);         //把y压入栈

    x = Pop(S);         //出栈  

    y = Pop(S);         //出栈

    printf("x=%d\ny=%d\n", x, y);

    return 1;

}

 

int main(void)

{

    int x, y;

    printf("Please enter x:");scanf("%d",&x);

    printf("Please enter y:");scanf("%d",&y);

    exchange(x, y);

    return 0;

}


3.程序执行

    程序执行结果如下:


1

2

3

4

Please enter x:30

Please enter y:40

x=40

y=30


时间: 2024-08-30 03:26:21

【数据结构之旅】顺序栈入门操作的相关文章

小菜一步一步学数据结构之(五)顺序栈

定义 只能在表的一端(栈顶)进行插入和删除运算的线性表 逻辑结构 一对一关系 存储结构 用顺序栈或链栈存储均可,但以顺序栈更常见 运算规则 只能从栈顶运算,且访问结点时依照后进先出(LIFO)或后进后出(FILO)的原则 实现方法 关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同 基本操作 入栈 出栈 读栈顶元素值 建栈 判断栈满 栈空 栈与一般线性表的区别 栈是一种特殊的线性表,它只能在表的一端(栈顶)进行插入或删除运算 ** 一般线性 表 栈 逻辑结构 一对一 一对一 存储结构

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明:     往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能   关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名   

c++-顺序栈中的重载操作&amp;amp;lt;&amp;amp;lt;

问题描述 顺序栈中的重载操作<< template osrtream& operator<<(ostream& os,SeqStack&s){ os<<"top="<<s.top<<endl; for(int i=0;i<=s.top;i++) os<<i<<":"<<s.elements[i]<<endl; return os;

数据结构顺序表(栈的操作问题)

问题描述 数据结构顺序表(栈的操作问题) 数据结构顺序表(栈的操作问题) x='@'; 在数据结构中有什么意义? 解决方案 数据结构中最简单的就是线性结构,而栈(stack)则是最典型的线性结构之一.http://blog.csdn.net/hopeyouknow/article/details/6725049 解决方案二: 一般这用来作为终止符号. 解决方案三: 没什么意义,只要符合栈的特点,怎么控制都行,这只是一种控制的方式

数据结构Java实现05----栈:顺序栈和链式堆栈

一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适用.   二.堆栈的抽象数据类型: 数据集合: 堆栈的

顺序存储线性表-数据结构顺序表的操作(c++)

问题描述 数据结构顺序表的操作(c++) 求解答谢谢 解决方案 贴出代码而不是截图.发了帖子你难道自己不看下.这么小的字根本看不清. 解决方案二: 什么是线性表?定义:由n(n>=0)个数据类型相同的数据元素组成的有限序列.特点是:在数据元素的非空有限集合中,除第一个元素无直接前驱,最后一个元素无直接后继外,集合中其余每个元素均有唯一的直接前驱和直接后继.什么是顺序表,在这里回答一下.顺序表就是线性表的顺序存储,其特点是:物理顺序与逻辑顺序是相同的,关系线性化,结点顺序存.线性表顺序存储的表示?

最好是mytc做-数据结构里关于栈的操作

问题描述 数据结构里关于栈的操作 1.采用链式存储实现栈的初始化.入栈.出栈操作. 2. 结构体部分代码: typedef struct node { int data; struct node *next; }StackNode,*LinkStack; //定义栈结构 LinkStack Init_LinkStack() { return NULL; } //初始化 函数(a): LinkStack Push_LinkStack(LinkStack top,int x)//入栈 {-} 函数(

c语言-@C语言数据结构大神:顺序栈求n!。13行的错误怎么修改?为啥说我定义栈错误?

问题描述 @C语言数据结构大神:顺序栈求n!.13行的错误怎么修改?为啥说我定义栈错误? # include<stdio.h> # include<stdlib.h> # define Max_Size 50 typedef struct{//typedef是小写开头! //注意此处的top是整形指针 int data[Max_Size]; int top; }SeqStack,*PSeqStack; void Init_SeqStack(PSeqStack S) { S->

数据结构之自建算法库——顺序栈

本文针对数据结构基础系列网络课程(3):栈和队列中第3课时栈的顺序存储结构及其基本运算实现. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 顺序栈算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:sqstack.h,包含定义顺序栈数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef SQSTACK_H_INCLUDED #define SQSTACK_H_INCLUDED #define MaxSize 100 typedef