博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈的链式存储实现
阅读量:6595 次
发布时间:2019-06-24

本文共 1784 字,大约阅读时间需要 5 分钟。

#define ERROR           0#define OK              1#define OVERFLOW       -1typedef int Status;typedef int SElemType;typedef struct SNode{    SElemType data;    struct SNode *next;}SNode;typedef struct{    SNode *top;}LinkStack;void InitStack(LinkStack *S){    assert(S);    S->top = NULL;}void DestroyStack(LinkStack *S){    assert(S);    SNode *tmp = S->top;    while (tmp)    {        S->top = tmp->next;        free(tmp);        tmp = S->top;    }}Status StackEmpty(LinkStack *S){    assert(S);    return NULL == S->top;}Status Push(LinkStack *S, SElemType e){    assert(S);    SNode *tmp;    tmp = (SNode *)malloc(sizeof(SNode));    if (!tmp)        exit(OVERFLOW);    tmp->data = e;    tmp->next = S->top;    S->top = tmp;    return OK;}Status Pop(LinkStack *S, SElemType *e){    assert(S);    SNode *tmp;    if (StackEmpty(S))        return ERROR;    tmp = S->top;    S->top = tmp->next;    if (e)        *e = tmp->data;    free(tmp);    return OK;}Status GetTop(LinkStack *S, SElemType *e){    assert(S);    if (StackEmpty(S))        return ERROR;    *e = S->top->data;    return OK;}void StackTraverse(LinkStack *S, void(*visit)(SElemType *)){    assert(S&&visit);    SNode *tmp;    tmp = S->top;    while (tmp)    {        visit(&tmp->data);        tmp = tmp->next;    }}

    测试程序:

#include
#include
#include
void visit(SElemType *e){ putchar(*e);}int main(){ LinkStack S; int c; InitStack(&S); while ('\n' != (c = getchar())) Push(&S, c); StackTraverse(&S, visit); putchar('\n'); while (!StackEmpty(&S)) { Pop(&S, &c); visit(&c); } DestroyStack(&S); putchar('\n'); system("pause"); return 0;}

    运行结果:

    栈的顺序存储实现请戳

转载于:https://www.cnblogs.com/inori/p/5011906.html

你可能感兴趣的文章
[Effective Java]第十一章 序列化
查看>>
[算法导论]红黑树实现(插入和删除) @ Python
查看>>
iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比
查看>>
使用ReaderWriterLock类实现多用户读/单用户写同步
查看>>
中国式危机公关9加1策略(第十四章 国外危机应对案例參考)
查看>>
CKEditor上传插件
查看>>
Java 缩放图片工具类,创建缩略图、伸缩图片比例
查看>>
Rebuild Instance 操作详解 - 每天5分钟玩转 OpenStack(37)
查看>>
利用scp传输文件小结
查看>>
面向对象设计模式纵横谈:Factory Method 工厂方法模式(笔记记录)
查看>>
C++使用hiredis连接带密码的redis服务
查看>>
SQL SERVER 批量生成编号
查看>>
thinkjs——一个字段一种数字代表两种状态
查看>>
C++的那些事:类的拷贝控制
查看>>
numpy得到数组的index
查看>>
JSP页面重定向
查看>>
RecyclerView具体解释
查看>>
vue2.0 vue-loader
查看>>
美国埃博拉患者是怎样治愈的?
查看>>
[离散时间信号处理学习笔记] 9. z变换性质
查看>>