加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

栈的多种C语言达成

发布时间:2021-11-21 16:43:12 所属栏目:PHP教程 来源:互联网
导读:概念 栈的定义 我们可以使用下面的结构体来定义栈: typedef struct stack { int top; int key[M]; } stack; 栈的属性 以栈s为例讨论。 s.top指向最新插入的元素。 当栈中包含的元素为s.key[1..s.top],其中s.key[1]是栈底元素,s.key[s.top]是栈顶元素。 栈

概念
栈的定义
我们可以使用下面的结构体来定义栈:
 
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 <stdio.h>
# 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 - %dn", stackEmpty(s));
 push(s, 2);
 push(s, 5);
 printf("stackEmpty - %dn", stackEmpty(s));
 printf("pop - %dn", 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 <stdio.h>
# 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 - %dn", 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];
 }
}
 
 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读