数据结构——栈的示例

  数据结构——栈,是先进后出的一种数据结构,这里使用的是单链表实现的栈。

  栈大多应用在算法上,比如说递归算法,递归中比较典型的是斐波那契数列,即0, 1, 1, 2, 3, 5, 8...... 第三个数开始,每个数是前两数之和;四则运算表达式求值的逆波兰表示法,也叫后缀表示法,等等。

  栈的示例代码如下,本程序是在 Android 系统下的 Compiler C语言编译器下通过编译。

  结构体中的 data 代表数据元素,在实际应用中 data 应该是另一个结构体,并且定义数据项,如:姓名、性别、年龄、籍贯等等类似的数据项。

/*程序功能:数据结构-栈的示例说明:栈的入栈和出栈功能全部实现作者:冰雪青松邮箱:946585434@qq.com日期:2022.09.27
*/
#include
#include//自定义布尔类型
#define BOOL  int
#define OK    1
#define TRUE  1
#define ERROR 0
#define FALSE 0typedef int Status;
typedef int SElemType;//定义栈的结构体
// StackNode 等相当于面向对象的类
typedef struct StackNode
{SElemType data;struct StackNode *next;
}StackNode, *LinkStackPtr;typedef struct LinkStack
{LinkStackPtr top;int count;
}LinkStack;// sl 相当于面向对象的对象
LinkStack sl;
LinkStack* pl = &sl;
/*功能:入栈函数@param LinkStack* p 自定义结构体类型指针@param SElemType e  自定义数据类型@return Status      自定义数据类型
*/
Status Push(LinkStack* p, SElemType e)
{LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));s->data = e;s->next = p->top;p->top = s;p->count++;return OK;
}/*功能:判断空栈函数说明:空栈判断依据是 count 为 0@param LinkStack* S 自定义结构体类型指针@return BOOL        自定义布尔类型
*/
BOOL StackEmpty(LinkStack* S)
{if(S->count <= 0)return TRUE;elsereturn FALSE;
}/*功能:出栈函数@param LinkStack* S 自定义结构体类型的指针@param SElemTyoe* e 自定义数据类型的指针@return Status      自定义数据类型
*/
Status Pop(LinkStack* S, SElemType* e)
{LinkStackPtr p;if(StackEmpty(S)){*e = 0;return ERROR;}*e = S->top->data;p = S->top;S->top = S->top->next;free(p);S->count--;return OK;
}/*功能:主函数入口
*/
int main()
{SElemType e;//进栈Push(pl, 580);//进栈Push(pl, 7809);//进栈Push(pl, 32);//出栈Pop(pl, &e);printf("%d ", e);//出栈Pop(pl, &e);printf("%d ", e);//出栈Pop(pl, &e);printf("%d ", e);//出栈Pop(pl, &e);printf("%d ", e);//出栈Pop(pl, &e);printf("%d ", e);return 0;
}

  进栈的顺序是:580, 7809, 32;出栈的顺序是:32, 7809, 580。先进后出,后进先出。

  后面的两个零其实是多出了两次栈。

程序执行后的效果:

ca28dc9ea5c54f8a8c51ff3dc58a4754.png

 

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部