c 语言栈,C语言栈

C语言实现简单的栈结构

今天看到一个问题是要交换两个变量的值并且不能使用中间变量,首先想到的方法就是用数学的方法:

int a = 10,b = 12;

a = a + b; // 求和

b = a - b; // 和减去b得到的是a的值

a = a - b; // 和减去a(此时的b是最初a的值)得到b 的值

这种方法很容易看得懂。

后来想用栈先进后出的特性,先把a、b按顺序压栈,然后a等于先出栈的b,b等于后出栈的a,于是就尝试下用C语言实现一个简单的栈结构。

首先是用结构体定义一个栈:

struct stack{

int top; // 记录栈中现有多少个数据,data[top]表示栈顶

int data[10]; // 表示栈中最多存10个数据

};

接下来是栈的一些基本操作:

压栈:

// 将一个数据压栈 成功返回1 不成功返回0 (栈溢出了)

int push(myStack * stack, int data){

// 判断是否溢出

if (stack->top + 1 <= N - 1) {

stack->data[++stack->top] = data;

return 1;

}else{

return 0;

}

}

出栈:

// 出栈 如果是空 返回-1 否则返回栈顶的数据 然后栈中元素数量减一

int pop(myStack * stack){

if (is_empty(stack)) {

return -1;

}else{

return stack->data[stack->top--];

}

}

判空处理:

// 判断栈是否为空

int is_empty(myStack * stack){

if (stack->top == -1) {

return 1;

}else{

return 0;

}

}

最后使用栈结构对两个变量值进行交换:

int a = 10, b = 12;

initStack();

push(pS, a);

push(pS, b);

a = pop(pS);

b = pop(pS);

printf("a = %d, b = %d\n",a,b);

遇到的问题:

开始的时候对栈的操作的一些函数的参数我都是用结构体类型传的,而不是现在的结构体指针类型。后来运行发现对结构体操作之后结构体的内容并没有改变。然后改成了结构体指针类型发现运行正确,测试了下发现用结构体类型参数传入函数中是无法操作的,据说C++可以,没试。

好吧,就这样

全部代码:

#include

#define N 10

struct stack{

int top; // 记录栈中有多少个数据,data[top]表示栈顶

int data[N];

};

typedef struct stack myStack;

myStack S;

myStack *pS = &S;

void initStack(){

pS->top = -1;

}

// 判断栈是否为空

int is_empty(myStack * stack){

if (stack->top == -1) {

return 1;

}else{

return 0;

}

}

// 设置栈为空

void set_empty(myStack * stack){

stack->top = -1;

}

// 将一个数据压栈 成功返回1 不成功返回0 (栈溢出了)

int push(myStack * stack, int data){

// 判断是否溢出

if (stack->top + 1 <= N - 1) {

stack->data[++stack->top] = data;

return 1;

}else{

return 0;

}

}

// 出栈 如果是空 返回-1 否则返回栈顶的数据 然后栈中元素数量减一

int pop(myStack * stack){

if (is_empty(stack)) {

return -1;

}else{

return stack->data[stack->top--];

}

}

int main() {

int a = 10, b = 12;

initStack();

push(pS, a);

push(pS, b);

a = pop(pS);

b = pop(pS);

printf("a = %d, b = %d\n",a,b);

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WebRTC---入门篇】(七)MediaStream

MediaStream方法 MediaStream.addTrack( ) 功能&#xff1a;向流媒体中加入不同的轨 MediaStream.removeTrack( ) 功能&#xff1a;从流媒体中移除不同的轨 MediaStream.getVideoTracks( ) 功能&#xff1a;从流媒体中取出所有的视频轨 MediaStream.getAudioTracks( …

jvm 宕机 打印jvm_通过入侵JVM打印阵列

jvm 宕机 打印jvm总览 Java中最常见的陷阱之一就是知道如何打印数组。 如果有关如何打印阵列的答案获得了超过1000票赞成票&#xff0c;那么您必须怀疑是否有更简单的方法。 几乎所有其他流行语言都具有这种更简单的方法&#xff0c;所以我不清楚为什么Java仍会这样做。 与其他…

python数码时钟代码_Python+Pyqt实现简单GUI电子时钟

本文实例为大家分享了PythonPyqt实现简单GUI电子时钟的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 突发奇想想用GUI做一个简单的电子时钟界面&#xff0c;利用pyqt模块也很方便&#xff0c;代码如下&#xff1a; from PyQt5.QtGui import * from PyQt5.QtCore im…

两个人投票的c语言程序,设计网页投票器(二)《精通Unix下C语言编程与项目实践》之十...

本处设计一个网页投票器&#xff0c;它访问“www.zhiliaowang.com”上的服务程序“/toupiaoceshi.asp”&#xff0c;并通过“name”参数向选手投票。如代码15-16所示&#xff1a;代码15-16网页投票器(节自/code/chapter15/http1.c)#include char buf2[]/*组装HTTP协议GET请求报…

【WebRTC---入门篇】(八)WebRTC核心之RTP Medio 媒体控制与数据统计

RTCPeerConnection底层是通过RTP Medio实现的,处理真正数据传输,编码流量各种控制的实现。 Receiver 通过 getReceivers 可以获取一组RTCRtpReceiver对象,用于接收数据 Sender 通过getSenders 可以获取一组RTCRtpSender对象,用于发送数据,每个对象对应一个媒体轨 RTCR…

事件驱动程序设计_简单的事件驱动设计

事件驱动程序设计总览 开发人员经常询问系统或其代码的性能或效率。 这到底是什么意思&#xff1f; 我的代码是如此高效&#xff0c;只有编码神能理解它的工作原理。 我的代码确实很聪明&#xff0c;但是却难以维护。 下一位开发人员将继续重写它。 我的代码对机器确实很有效…

python语言中的单行注释语句_Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)...

#第一个注释 print ("Hello, Python!") #第二个注释 输出结果为&#xff1a;RESTART: E:/python/change.py Hello, Python! 多行注释可以用多个 # 号&#xff0c;还有 和 """&#xff1a;实例如下&#xff1a; #第一个注释#第二个注释 第三注释 第四…

c语言文件的读写通讯录,学C三个月了,学了文件,用C语言写了个通讯录程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include #include struct QQ //结构体&#xff0c;有6个成员{char name[20];char age[5];char tel[15];char qq[15];char birth[12];char address[80];}user;void style()//窗口风格函数{system("mode con…

【WebRTC---入门篇】(九)WebRTC网络基础:P2P/STUN/TURN/ICE

NAT 作用:内网地址转公网地址 STUN 作用:中介将公网信息彼此交换 TURN 作用:P2P不成功的话在云端架设服务器,双方进入同一房间。可以在一起进行数据交互 ICE 作用:打包以上取最优,先尝试P2P。如果P2P不通再选择TURN。ICE尝试所有可能性 Relay是TURN Server,大多数情况…

antlr4例子_ANTLR和网络:一个简单的例子

antlr4例子网络上的ANTLR&#xff1a;为什么&#xff1f; 我开始在MS-DOS上编写我的第一个程序。 因此&#xff0c;我非常习惯在自己的机器上安装工具。 但是在2016年&#xff0c;网络无处不在&#xff0c;因此那里也可能需要我们的语言。 可能的情况&#xff1a; ANTLR 也在…

python 形参_python中参数总结

一、形参和实参 函数参数的作用是传递数据给函数使用。 在使用的过程中&#xff0c;参数有两种形式&#xff1a;形式参数和实际参数 形参&#xff1a;定义函数时的参数 实参&#xff1a;调用函数时的参数 根据实际参数类型不同&#xff0c;将实际参数传递给形参的方式有两种&am…

【WebRTC---入门篇】(十)NAT

NAT主要用于内网穿透 NAT产生原因 NAT的种类 NAT穿越原理 完全锥型:内网主机先向外发送一个请求形成IP和port

linux安装mq报5724,小白提问:linux安装MQ出现的错误

在安装MQ中遇到以下问题&#xff0c;求大神帮助# ./mqlicense.sh -acceptLicensed Materials - Property of IBM 5724-H72 (C) Copyright IBM Corporation 1994, 2009 All rights reserved.US Gover...显示全部在安装MQ中遇到以下问题&#xff0c;求大神帮助…

maven java1.7_本周Java技巧#7 – Maven慢吗?

maven java1.7本周Java本周技巧是有关Maven的上一期的后续内容。 第一个视频介绍了与Maven依赖关系有关的方面。 该视频将介绍一些加快Maven构建速度的技术。 Maven慢吗&#xff1f; 从Maven 3开始&#xff0c;您可以并行运行构建。 根据构建机器和项目结构的不同&#xff0c;…

vector 删除指定元素_std::vector简介

引入使用vector&#xff0c;需添加头文件#include<vector>&#xff0c;要使用sort或find&#xff0c;则需要添加头文件#include<algorithm>。简介vector是表示可以改变大小的数组的序列容器。就像数组一样&#xff0c;vector使用连续存储空间存储元素&#xff0c;这…

【WebRTC---入门篇】(十一)STUN协议

STUN作用:用于NAT穿越;它是典型的CS模式 RFC STUN规范 STUN header STUN Header格式

linux dd iflag oflag,centos – dd oflag =直接5倍速

我在这个规格的服务器中有Centos 6.2&#xff1a;2xcpu 16 Core AMD Opteron 6282 SE64GB RAMRaid controller H700 1GB cache NV- 2HD 74GB SAS 15Krpm RAID1 stripe 16k (OS Centos 6.2) sda- 4HD 146GB SAS 15Krpm RAID10 stripe 16k (ext4 bs 4096,no barriers) sdb -> …

mysql数据迁移到sqlserver_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...

这是一个.net下操作数据库(结构数据库)的工具类&#xff0c;支持sqlserver、oracle、mysql、postgres、sqlite、access等常见数据库。注意&#xff1a;它并不是一个orm工具(常见的orm框架如&#xff1a;EF、Dapper等)。2.1 引入DBUtil依赖1. 首先打开vs(推荐vs2019)&#xff0c…

【H.264/AVC视频编解码技术】第二章【H264码流分析】

H264码流分层 NAL层,视频数据网络抽象层,作用是控制二进制数据的传输,主要用于网络传输。 VCL层,视频数据编码层。 VCL结构关系 NALU NAL Header (1B)+ RBSP H264码流中NALU sps pps IDR帧的理解 概念 什么是NALU? H264码流可以分为两层,VCL层和NAL层,NAL的全称…

jcmd_程序化JCMD访问

jcmd在线提出的问题表明&#xff0c;开发人员偶尔会希望通过Java应用程序访问通常从针对应用程序外部运行JConsole &#xff0c; VisualVM或JDK命令行工具获得的信息类型。 以下是这类问题的一些示例&#xff1a; 如何以编程方式获取jmap直方图&#xff1f; 以编程方式从Java…