大话数据结构 code 第四章 03链栈_LinkStack
来源:互联网 发布:coc野蛮人之王升级数据 编辑:程序博客网 时间:2024/05/16 12:06
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status; typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int *//* 链栈结构 */typedef struct StackNode{ SElemType data; struct StackNode *next;}StackNode,*LinkStackPtr;typedef struct{ LinkStackPtr top; int count;}LinkStack;Status visit(SElemType c){ printf("%d ",c); return OK;}/* 构造一个空栈S */Status InitStack(LinkStack *S){ S->top = (LinkStackPtr)malloc(sizeof(StackNode)); if(!S->top) return ERROR; S->top=NULL; S->count=0; return OK;}/* 把S置为空栈 */Status ClearStack(LinkStack *S){ LinkStackPtr p,q; p=S->top; while(p) { q=p; p=p->next; free(q); } S->count=0; return OK;}/* 若栈S为空栈,则返回TRUE,否则返回FALSE */Status StackEmpty(LinkStack S){ if (S.count==0) return TRUE; else return FALSE;}/* 返回S的元素个数,即栈的长度 */int StackLength(LinkStack S){ return S.count;}/* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */Status GetTop(LinkStack S,SElemType *e){ if (S.top==NULL) return ERROR; else *e=S.top->data; return OK;}/* 插入元素e为新的栈顶元素 */Status Push(LinkStack *S,SElemType e){ LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode)); s->data=e; s->next=S->top;/* 把当前的栈顶元素赋值给新结点的直接后继,见图中① */ S->top=s; /* 将新的结点s赋值给栈顶指针,见图中② */ S->count++; return OK;}/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */Status Pop(LinkStack *S,SElemType *e){ LinkStackPtr p; if(StackEmpty(*S)) return ERROR; *e=S->top->data; p=S->top;/* 将栈顶结点赋值给p,见图中③ */ S->top=S->top->next; /* 使得栈顶指针下移一位,指向后一结点,见图中④ */ free(p); /* 释放结点p */ S->count--; return OK;}Status StackTraverse(LinkStack S){ LinkStackPtr p; p=S.top; while(p) { visit(p->data); p=p->next; } printf("\n"); return OK;}int main(){ int j; LinkStack s; int e; if(InitStack(&s)==OK) for(j=1;j<=10;j++) Push(&s,j); printf("栈中元素依次为:"); StackTraverse(s); Pop(&s,&e); printf("弹出的栈顶元素 e=%d\n",e); printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s)); GetTop(s,&e); printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s)); ClearStack(&s); printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s)); return 0;}
阅读全文
0 0
- 大话数据结构 code 第四章 03链栈_LinkStack
- 【数据结构】链栈_LinkStack
- 大话数据结构 code 第四章 01顺序栈_Stack
- 大话数据结构 code 第四章 05顺序队列_Queue
- 大话数据结构 code第四章 06链队列_Link
- 《大话数据结构》第四章 队列
- 大话数据结构 code 第四章 02两栈共享空间_DoubleStack
- 大话数据结构 code 第四章 04斐波那契函数_Fibonacci
- 大话数据结构 code 第三章 03静态链表_StaticLinkList
- 大话数据结构 code 第八章 03平衡二叉树_AVLTree
- 《大话数据结构》第四章栈与队列
- 大话数据结构--第四章 栈与队列
- 《大话数据结构》第四章 栈与队列
- 《大话数据结构》笔记之 第四章 栈与队列
- 大话数据结构第四章——栈与队列
- 大话数据结构 第四章 栈与队列 (读书笔记)
- 大话数据结构第四章栈十个问题及解答
- 「笔记」《大话数据结构》第四章:栈与队列
- 算法提高 日期计算
- Python yield 使用浅析
- 手机端页面的点击效果实现
- CSipSimple源码分析(一)之代码流程和用户注册流程
- Java成员变量和成员方法
- 大话数据结构 code 第四章 03链栈_LinkStack
- C++快速幂
- python下人脸检测
- Codeforces 835D Round #427 Div2D :回文串DP
- 设计模式-外观模式
- 20个非常有用的Java程序片段
- 读取配置文件
- 确定类型和表达式在编译期信息的模板技术
- 菱形继承