`
xitong
  • 浏览: 6400905 次
文章分类
社区版块
存档分类
最新评论

栈的C语言实现

 
阅读更多

栈的C语言实现

简述

栈是实现后进先出(FIFO)策略的一种基本数据结构。我们可以通过多种方式实现栈这种数据结构。

我们可以用下面的结构体来定义栈:

typedef struct stack {

inttop;

intkey[M];

} stack;

栈的一个属性s.top指向最新插入的元素。栈的另外一个属性s.key[]存放的是元素的关键字,包含的元素为s.key[1…s.top],其中s.key[1]是栈底元素,s.key[s.top]是栈顶元素。当s.top = 0时,栈空。

代码实现

下面程序省略了对上溢和下溢的检查。main()函数中的语句主要是栈的初始化和测试。

数组实现

最简单的方法也许就是数组了,不用考虑参数传递问题。

源代码如下:

# include <stdio.h>

# define M 100

int stackEmpty(int s[]);

void push(int s[], int x);

int pop(int s[]);

int main(void)

{

ints[M];

s[0]= 0;

printf("stackEmpty- %d\n", stackEmpty(s));

push(s,2);

push(s,5);

printf("stackEmpty- %d\n", stackEmpty(s));

printf("pop- %d\n", pop(s));

return0;

}

int stackEmpty(int s[])

{

if(s[0]== 0) {

return1;

}else {

return0;

}

}

void push(int s[], int x)

{

s[0]++;

s[s[0]]= x;

}

int pop(int s[])

{

if(s[0]== 0) {

return-1;

}else {

returns[s[0]--];

}

}

参数传值实现

注意:在参数传递的过程中使用的是地址

源代码如下:

# include <stdio.h>

# define M 100

typedef struct stack {

inttop;

intkey[M];

} stack;

int stackEmpty(stack s);

void push(stack * s, int x);

int pop(stack * s);

int main(void)

{

stacks;

s.top= 0;

/*测试代码 */

push(&s,2);

push(&s,3);

printf("pop- %d\n", pop(&s));

printf("stackEmpty- %d", stackEmpty(s));

}

int stackEmpty(stack s)

{

if(s.top== 0) {

return1;

}else {

return0;

}

}

void push(stack * sp, int x)

{

sp-> top += 1;

sp-> key[sp -> top] = x;

}

int pop(stack * sp)

{

if(sp-> top == 0) {

return-1;

}else {

sp-> top--;

returnsp -> key[sp -> top + 1];

}

}

引用实现

引用很好用,可惜C语言里没有。

源代码如下:

# include <stdio.h>

# define M 100

typedef struct stack {

inttop;

intkey[M];

} stack;

int stackEmpty(stack s);

void push(stack & s, int x);

int pop(stack & s);

int main(void)

{

stacks;

s.top= 0;

/*测试代码 */

push(s,2);

push(s,3);

printf("pop- %d\n", pop(s));

printf("stackEmpty- %d", stackEmpty(s));

}

int stackEmpty(stack s)

{

if(s.top== 0) {

return1;

}else {

return0;

}

}

void push(stack & s, int x)

{

s.top+= 1;

s.key[s.top]= x;

}

int pop(stack & s)

{

if(s.top== 0) {

return-1;

}else {

s.top--;

returns.key[s.top + 1];

}

}

全局变量实现

全局变量可以一直保存变量的值,不会因某个函数的结束而销毁,并且不用作为参数传递给函数。

源代码如下:

# include <stdio.h>

# define M 100

typedef struct stack {

inttop;

intkey[M];

} stack;

stack s;

int stackEmpty(void);

void push(int x);

int pop(void);

int main(void)

{

s.top= 0;

/*测试代码 */

push(2);

push(3);

printf("pop- %d\n", pop());

printf("stackEmpty- %d", stackEmpty());

}

int stackEmpty(void)

{

if(s.top== 0) {

return1;

}else {

return0;

}

}

void push(int x)

{

s.top+= 1;

s.key[s.top]= x;

}

int pop(void)

{

if(s.top== 0) {

return-1;

}else {

s.top--;

returns.key[s.top + 1];

}

}

另一种数组实现

第一种数组实现的时候使用s[0]表示s.top,如果定义一个新变量stop,可以让程序变得更加简单易读。

源代码如下:

# include <stdio.h>

# define M 100

int s[M];

int stop;

//stop = 0; //外部变量不能赋值吗??

int stackEmpty(void);

void push(int x);

int pop();

int main(void)

{

stop= 0;

printf("stackEmpty- %d\n", stackEmpty());

push(3);

printf("stackEmpty- %d\n", stackEmpty());

push(5);

//printf("pop- %d - %d\n", pop(), pop()); //这是一个未定义行为

printf("pop- %d\n", pop());

printf("pop- %d\n", pop());

printf("stackEmpty- %d\n", stackEmpty());

return0;

}

int stackEmpty(void)

{

if(stop== 0) {

return1;

}else {

return0;

}

}

void push(int x)

{

s[++stop]= x;

}

int pop(void)

{

returns[stop--];

}

小记

作为一种基本的数据结构,栈的实现还是挺简单的。

(全文完)

分享到:
评论

相关推荐

    C例子:栈C语言实现

    本示例将详细介绍如何用C语言实现一个简单的栈。 首先,我们来看`Ex015_Stack2.h`头文件。这个头文件通常包含栈的数据结构定义以及相关的函数声明。在C语言中,我们可以使用结构体来表示栈。结构体可能包含一个数组...

    icmp源代码 TCP/IP协议栈 C语言实现

    综上所述,"icmp源代码 TCP/IP协议栈 C语言实现"项目涉及到构建一个能够处理ICMP协议的底层网络组件。通过理解ICMP协议的工作原理,以及如何在C语言中实现其核心功能,我们可以更好地掌握网络通信的基础,并且有能力...

    Stack 栈 C语言实现

    可运行C语言版本参考严蔚敏版本的数据结构与算法书,希望对正在学习的同学或者考研的同学有所帮助,我的代码都是在VC6.0上编写,编译。 #ifndef MAZE_H_ #define MAZE_H_ #include "stack.h" /** * position */ ...

    栈的实现(C语言)数组实现以及链表实现

    栈的实现(C语言)数组实现以及链表实现源码,以及各个功能测试代码函数等 和后缀式转前缀式的用例

    C语言实现栈与队列

    本项目是用C语言实现的栈和队列,提供了可加载和使用的源代码,这对于理解这两种数据结构的工作原理以及在C语言中如何实现它们非常有帮助。 首先,让我们详细了解栈和队列的概念: 1. 栈(Stack):栈是一种后进先...

    《算法与数据结构》第四章:栈与队列-顺序栈C语言实现

    使用C语言将《数据结构》中的ADT(抽象数据类型)中操作实现,帮助理解

    C语言实现ICMP协议 TCP/IP协议栈

    C语言实现ICMP协议 TCP/IP协议栈C语言实现ICMP协议 TCP/IP协议栈C语言实现ICMP协议 TCP/IP协议栈

    栈实现计算器(C语言实现)

    本篇将详细介绍如何使用C语言实现一个基于栈的计算器。 首先,我们需要理解栈的基本操作:入栈(push)、出栈(pop)、查看栈顶元素(peek)以及检查栈是否为空(isEmpty)。在我们的计算器中,主要会用到两个栈,...

    数据结构——栈 的 C语言 实现代码

    本文将深入探讨栈的C语言实现,帮助读者理解栈的工作原理及其在实际编程中的应用。 栈被称为“后进先出”(Last In First Out, LIFO)的数据结构,因为元素的添加(压栈)和移除(弹栈)都发生在栈顶。栈的操作通常...

    数据结构-栈的C语言实现

    数据结构-栈的C语言实现,随手笔记

    C语言实现栈实现表达式

    C语言实现栈实现表达式,很好用,有需要的请来下载。

    数据结构——顺序栈的C语言实现

    本文将深入探讨顺序栈的概念,并通过C语言来实现它。 顺序栈是一种线性数据结构,它的元素在内存中是连续存储的,就像数组一样。栈顶是栈的唯一访问点,允许进行压栈(Push,即向栈顶添加元素)和弹栈(Pop,即移除...

    栈的C语言实现(数据域为int型)

    栈的C语言实现 在计算机科学中,栈是一种基本的数据结构,栈是一种后进先出(LIFO)数据结构,可以实现元素的压栈、出栈、遍历等操作。这里,我们使用C语言实现一个栈的基本操作,包括栈的初始化、压栈、出栈、遍历...

    基于栈的C语言迷宫问题与实现.docx

    基于栈的C语言迷宫问题与实现 ...本文对基于栈的C语言迷宫问题进行了详细的分析和实现,提供了迷宫问题的解决思路、栈的C语言实现、迷宫的生成、具体的判断算法等内容,为读者提供了一个完整的解决方案。

    数据结构中关于栈c语言源码

    在这个“数据结构中关于栈C语言源码”的主题里,我们将深入探讨栈的概念,C语言实现栈的原理,以及如何通过给定的`stack.c`文件来理解和学习栈的编程实践。 首先,栈是一个线性数据结构,其主要操作包括压栈(Push...

    c语言实现的数据结构中的栈

    总结来说,使用C语言实现数据结构中的栈涉及定义结构体、初始化栈、实现基本操作(压栈、弹栈、查顶)以及可能的内存管理(扩容和缩容)。这个过程不仅加深了对数据结构的理解,也为编写高效、可靠的代码提供了基础...

    C语言 栈的实现,包含顺序栈和链栈,亲测可用

    3. **C语言实现**:C语言以其简洁和强大的底层控制能力,是实现数据结构的理想选择。在这些文件中,可以看到C语言的基本语法,如结构体定义、指针操作、循环和条件判断等,这些都是实现栈操作的关键。 4. **头文件*...

    c语言用栈实现计算器功能

    总之,使用C语言和栈数据结构实现计算器功能是一个很好的实践项目,它可以帮助开发者巩固对数据结构、逻辑思维和算法的理解,同时也能提升实际编程能力。在实现过程中,通过不断优化和调试,可以逐步提高代码的效率...

    完整开源ZigBee协议栈C语言代码

    `FreakZ_v075`可能是一个具体的ZigBee协议栈版本,包含了这些层次的C语言实现。这个版本可能包含配置文件、源代码、头文件、文档和其他辅助工具。开发者可以深入研究代码,理解每个层次的功能实现,甚至根据需求修改...

Global site tag (gtag.js) - Google Analytics