栈的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语言实现一个简单的栈。 首先,我们来看`Ex015_Stack2.h`头文件。这个头文件通常包含栈的数据结构定义以及相关的函数声明。在C语言中,我们可以使用结构体来表示栈。结构体可能包含一个数组...
综上所述,"icmp源代码 TCP/IP协议栈 C语言实现"项目涉及到构建一个能够处理ICMP协议的底层网络组件。通过理解ICMP协议的工作原理,以及如何在C语言中实现其核心功能,我们可以更好地掌握网络通信的基础,并且有能力...
可运行C语言版本参考严蔚敏版本的数据结构与算法书,希望对正在学习的同学或者考研的同学有所帮助,我的代码都是在VC6.0上编写,编译。 #ifndef MAZE_H_ #define MAZE_H_ #include "stack.h" /** * position */ ...
栈的实现(C语言)数组实现以及链表实现源码,以及各个功能测试代码函数等 和后缀式转前缀式的用例
本项目是用C语言实现的栈和队列,提供了可加载和使用的源代码,这对于理解这两种数据结构的工作原理以及在C语言中如何实现它们非常有帮助。 首先,让我们详细了解栈和队列的概念: 1. 栈(Stack):栈是一种后进先...
使用C语言将《数据结构》中的ADT(抽象数据类型)中操作实现,帮助理解
C语言实现ICMP协议 TCP/IP协议栈C语言实现ICMP协议 TCP/IP协议栈C语言实现ICMP协议 TCP/IP协议栈
本篇将详细介绍如何使用C语言实现一个基于栈的计算器。 首先,我们需要理解栈的基本操作:入栈(push)、出栈(pop)、查看栈顶元素(peek)以及检查栈是否为空(isEmpty)。在我们的计算器中,主要会用到两个栈,...
本文将深入探讨栈的C语言实现,帮助读者理解栈的工作原理及其在实际编程中的应用。 栈被称为“后进先出”(Last In First Out, LIFO)的数据结构,因为元素的添加(压栈)和移除(弹栈)都发生在栈顶。栈的操作通常...
数据结构-栈的C语言实现,随手笔记
C语言实现栈实现表达式,很好用,有需要的请来下载。
本文将深入探讨顺序栈的概念,并通过C语言来实现它。 顺序栈是一种线性数据结构,它的元素在内存中是连续存储的,就像数组一样。栈顶是栈的唯一访问点,允许进行压栈(Push,即向栈顶添加元素)和弹栈(Pop,即移除...
栈的C语言实现 在计算机科学中,栈是一种基本的数据结构,栈是一种后进先出(LIFO)数据结构,可以实现元素的压栈、出栈、遍历等操作。这里,我们使用C语言实现一个栈的基本操作,包括栈的初始化、压栈、出栈、遍历...
基于栈的C语言迷宫问题与实现 ...本文对基于栈的C语言迷宫问题进行了详细的分析和实现,提供了迷宫问题的解决思路、栈的C语言实现、迷宫的生成、具体的判断算法等内容,为读者提供了一个完整的解决方案。
在这个“数据结构中关于栈C语言源码”的主题里,我们将深入探讨栈的概念,C语言实现栈的原理,以及如何通过给定的`stack.c`文件来理解和学习栈的编程实践。 首先,栈是一个线性数据结构,其主要操作包括压栈(Push...
总结来说,使用C语言实现数据结构中的栈涉及定义结构体、初始化栈、实现基本操作(压栈、弹栈、查顶)以及可能的内存管理(扩容和缩容)。这个过程不仅加深了对数据结构的理解,也为编写高效、可靠的代码提供了基础...
3. **C语言实现**:C语言以其简洁和强大的底层控制能力,是实现数据结构的理想选择。在这些文件中,可以看到C语言的基本语法,如结构体定义、指针操作、循环和条件判断等,这些都是实现栈操作的关键。 4. **头文件*...
总之,使用C语言和栈数据结构实现计算器功能是一个很好的实践项目,它可以帮助开发者巩固对数据结构、逻辑思维和算法的理解,同时也能提升实际编程能力。在实现过程中,通过不断优化和调试,可以逐步提高代码的效率...
`FreakZ_v075`可能是一个具体的ZigBee协议栈版本,包含了这些层次的C语言实现。这个版本可能包含配置文件、源代码、头文件、文档和其他辅助工具。开发者可以深入研究代码,理解每个层次的功能实现,甚至根据需求修改...