设为首页 加入收藏

TOP

栈的多种C语言实现
2014-11-24 03:17:22 来源: 作者: 【 】 浏览:1
Tags:多种 语言 实现

标题:栈的多种C语言实现


内容:栈是一种后进先出(LIFO)的数据结构,C语言中可以使用数组、全局变量、指针传参、引用传参等方法实现。


作者:MilkCu


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


typedef struct stack {
int top;
int key[M];
} stack;


以栈s为例讨论。


s.top指向最新插入的元素。
当栈中包含的元素为s.key[1..s.top],其中s.key[1]是栈底元素,s.key[s.top]是栈顶元素。


压入(push):将数据放在栈顶;


弹出(pop):返回弹出值,并删除元素。


s.top = 0时,栈中不包含任何元素,即栈是空的。


最简单的实现方法,不会涉及到结构体的参数传递问题。


使用s[0]表示s.top。


# include
# define M 100
int stackEmpty(int s[]);
void push(int s[], int x);
int pop(int s[]);
int main(void)
{
int s[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));
return 0;
}
int stackEmpty(int s[])
{
if(s[0] == 0) {
return 1;
} else {
return 0;
}
}
void push(int s[], int x)
{
s[0]++;
s[s[0]] = x;
}
int pop(int s[])
{
if(s[0] == 0) {
return -1;
} else {
return s[s[0]--];
}
}


传递参数的时候要用指针,否则不能改变参数的值!


# include
# define M 100
typedef struct stack {
int top;
int key[M];
} stack;
int stackEmpty(stack s);
void push(stack * s, int x);
int pop(stack * s);
int main(void)
{
stack s;
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) {
return 1;
} else {
return 0;
}
}
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--;
return sp -> key[sp -> top + 1];
}
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇带哨兵的双向循环链表的C语言实现 下一篇驱动程序直接编译进内核

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)