c语言出栈指令,c语言进栈出栈完整代码

本文目录一览:

c语言的简单的进栈出栈

就用这堆函数就可以了,不懂再追问

#include

string.h

#define

MaxSize

100

int

mystack[MaxSize];/*

第0个单元保存现在的长度

*/

/*

初始化函数

*/

void

init_stack(int*

stack){

memset(stack,0,sizeof(stack));

}

/*

入栈函数

*/

void

push_back(int*

stack,int

num){

if(stack[0]MaxSize-1){

++stack[0];

stack[

stack[0]

]

=

num;

}

else{

printf(“ERORR!\n”);

}

}

/*

返回栈空间

*/

int

size(int*

stack){

return

stack[0];

}

/*

返回栈顶函数

*/

int

top(int*

stack){

if(stack[0]0){

return

stack[

stack[0]

];

}

else{

printf(“ERORR!\n”);

return

-1;

}

}

/*

出栈函数

*/

void

pop(int*

stack){

if(stack[0]0){

–stack[0];

}

else{

printf(“ERORR!\n”);

}

}

C语言 进栈和出栈:

闲得没事干,跟你详细讲讲吧。

首先要弄明白一点,栈的结构是“先进后出“的,就像你堆积木一样,第一根放在最底层的地面上,然后一根一根往上堆。前一个放上去的总是被后一个放上去的压在底下。那我当我再想里面放一根的时候,总不能放中间或者放底下吧(除非你很无聊 很寂寞 闲的蛋疼了 先一根根把堆在上面的全部拿出来 然后把要放进去的那根放上去 最后又把刚才搬下来的有重新搬上去……此处省去几万字)所以要往上面加东西的时候,就得放在最上面。

以上就是进栈的原理,怎么出栈呢,很简单,直接从”积木”的最顶端取下来就行了。

ok,以上比喻完了,希望你能看得明白。接下来讲程序不说积木了:),由上面的分析 我们可以知道一个道理,对于栈的操作,栈顶的元素很重要(也就是积木最上面的那根)。为什么呢。无论是出栈还是进栈,都跟那哥们有直接的联系。你想啊,如果要是有元素要进栈的话,那么它就不能当“老顶”了,那老顶之位就要交给压在它上头那位了;如果出栈呢,它也不能当老顶了,老顶之位就要交到原来压在它底下的那个。

ok,所以一般的栈都将栈顶的那个元素所在的位置(内存地址–数组类型的,或者指针—节点类型的)视为栈的栈顶~!通过它来对栈进出进行操作。

一般来说(或者在我出生以来看到过的)栈有两种内存结构(注意是是内存结构,有的书说是存储结构,都一样一样滴),一种是连续的,一种是不连续的,连续的基本上就是数组了,不连续的基本上就是链表类型的啦。你上面的程序就是链表类型的,每个节点都有个指针指向它“底下”的节点(我觉得“底下”比下一个更容易理解)。通过这种你链我 我链它的方式,把一组数据连在一起。

进栈:

int Push(STACK *S,int e)//进栈

{

SNode *p; //step1:这个编程习惯不好,没定义一个指针就应该把它指向NULL

p=(SNode *)malloc(sizeof(SNode)); //step2:为你的节点分配内存

if(!p)

return ERROR;

p-data=e; //step3:当然了,你那个传进来的e是相当于temp,用来传值的,ok,那就把它的 数据给p咯,p实际指向的是一块内存块,用来装节点的

p-next=S-top; //step4:回到上面积木问题,进栈的时候,原来的老顶要给新来的让位,但是如果这时候的top节点直接赋给新来的元素的话,那么那个原来的老顶是不是从此以后都找不到它了?所以,先把新来的元素的next指针指向当前的老顶,这样的话,以后通过next指针就可以找到它了。

S-top=p; //当然,都已经处理好以前老顶的身后事了(就是以后可以通过p的next指针找到它了)那么“让位”就可以进行了,这时,p便戴上了 老顶 之帽了

S-length++; //既然人数都增加了,那就到公安局登记入户口吧

return OK; //一切over,现在这个栈stack的栈顶位置就是你刚才新加进来的p了,通过stock.top指针就可以访问到栈顶,然后出栈也是同理的,ok,all over

}

C语言中什么是出栈?

栈是一种数据结构,一个栈相当于一个盒子,把东西(数据)放入盒子里的过程叫做入栈,把东西从盒子里取出来的过程叫做出栈。栈还有一个特殊的规则,就是先进后出,即盒子里的东西只能叠加摆放,放进去的下一件东西只能堆在前一件东西的上面,取出时只能先取出盒子最上面的一件东西。出栈也就是将栈指针所指的数据从栈中弹出的过程,每一次出栈的一定是栈顶元素,出栈后栈指针向下移动一位指向下一个元素。习惯上入栈用PUSH表示,出栈用POP表示。

用C语言实现入栈出栈

#include

stdio.h

int

stack[100];

/*100个栈空间*/

int*

sp

=

stack;

/*栈指针指向栈底*/

#define

push(

i

)

{

*sp++

=

i;

}

/*push一个数*/

#define

pop()

(*–sp)

/*pop一个数并返回*/

int

main()

{

int

i;

for

(

i

=

0;

i

10;

++i

)/*push

0~9*/

push(

i

);

for

(

i

=

0;

i

10;

++i

)/*输出9~0*/

printf(

“%d

“,

pop()

)

;

}

C语言 出栈操作Pop(struct SqStack * MyStack, ElemType *e

#include stdio.h

#include conio.h

#include stdlib.h

#define elemType int /* 链栈元素数据类型 */

#define SNODE_SIZE sizeof (struct sNode) /* 链栈结点空间大小 */

#define status int /* 状态型变量 */

#define OVERFLOW -1 /* 内存溢出状态码 */

#define ERROR 0 /* 错误状态码 */

#define OK 1 /* 正确状态码 */

/* 链栈结点存储结构 */

typedef struct sNode {

elemType data;

struct sNode *next;

} sNode, *sNodePtr;

/* 链栈存储结构 */

typedef struct linkStack {

sNodePtr top; /* 栈顶指针 */

} linkStack;

/* 初始化 */

/* 操作结果:构造一个带头结点的空链栈S */

void initStack (linkStack *S) {

S-top = (sNodePtr) malloc (SNODE_SIZE); /* 产生头结点,栈顶指针指向此头结点 */

if (!S-top) /* 内存分配失败 */

exit (OVERFLOW);

S-top-next = NULL;

}

/* 销毁 */

/* 初始条件:链栈S已存在。操作结果:销毁链栈S */

void destroyStack (linkStack *S) {

sNodePtr p, q;

p = S-top; /* p指向S的头结点 */

while (p) {

q = p-next; /* q指向p的下一个结点 */

free (p); /* 回收p指向的结点 */

p = q; /* p移动到下一个结点 */

} /* 直到没有下一个结点 */

}

/* 判断链栈是否为空 */

/* 初始条件:链栈S已存在。操作结果:若S为空链栈,则返回TRUE,否则返回FALSE */

status stackIsEmpty (linkStack *S) {

return S-top-next == NULL;

}

/* 入栈 */

/* 操作结果:在S的栈顶插入新的元素e */

status push (linkStack *S, elemType e) {

sNodePtr p;

p = (sNodePtr) malloc (SNODE_SIZE); /* 产生新结点 */

if (!p) /* 内存分配失败 */

exit (OVERFLOW);

p-data = e;

p-next = S-top-next; /* 将新结点链接到原栈顶 */

S-top-next = p; /* 栈顶指向新结点 */

}

/* 出栈 */

/* 操作结果:删除S的栈顶元素,并由e返回其值 */

status pop (linkStack *S, elemType *e) {

sNodePtr p;

if (stackIsEmpty (S))

return ERROR;

p = S-top-next; /* p指向链栈的第一个结点 */

*e = p-data; /* 取出数据 */

S-top-next = p-next;

free (p); /* 删除该结点 */

    if (S-top == p) /* 栈为空 */

     S-top-next = NULL;

    

    return OK;

}

/* 打印栈内容 */

/* 初始条件:链栈S已存在。操作结果:当栈不为空时,打印栈内容并返回OK,否则返回ERROR */

status printStack (linkStack *S) {

sNodePtr p;

if (stackIsEmpty (S)) {

puts (“The stack is empty! “);

return ERROR;

}

p = S-top-next;

while (p) {

printf (“%d\t”, p-data);

p = p-next;

}

putchar (‘\n’);

return OK;

}

int main (void) {

linkStack S;

elemType e; 

elemType a, b, c, d;

a = 1; b = 2; c = 3; d = 4;

initStack (S);

push (S, a);

push (S, b);

push (S, c);

push (S, d);

puts (“Push 4 elements”);

printf (“S:\t”);

printStack (S);

putchar (‘\n’);

pop (S, e);

puts (“Pop 1 element”);

printf (“S:\t”);

printStack (S);

destroyStack (S);

getch (); /* 屏幕暂留 */

return 0;

}

如有问题,可以点击头像联系我

关于进栈出栈的C语言

双击每一条错误提示,就会指示是哪一行出错,或者是其上一行的末尾有错误。因为运行环境不同所以没办法告诉你错在哪

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/311161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-05 13:23
下一篇 2025-01-05 13:23

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • 打造照片漫画生成器的完整指南

    本文将分享如何使用Python编写一个简单的照片漫画生成器,本文所提到的所有代码和技术都适用于初学者。 一、环境准备 在开始编写代码之前,我们需要准备一些必要的环境。 首先,需要安…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • 仓库管理系统代码设计Python

    这篇文章将详细探讨如何设计一个基于Python的仓库管理系统。 一、基本需求 在着手设计之前,我们首先需要确定仓库管理系统的基本需求。 我们可以将需求分为以下几个方面: 1、库存管…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29

发表回复

登录后才能评论