栈的实现 (数据结构 严蔚敏 清华大学出版社 第三章 抽象数据类型 成功编译并运行)
来源:互联网 发布:mysql thread conn 编辑:程序博客网 时间:2024/06/06 09:46
栈的实现
栈的操作://主函数 main.cpp#include "header.h"#define N 20Status visit(ElemType c){ printf("%d ", c); return OK;}int main(void ){ int j; SqStack s; ElemType e; if(InitStack(&s)) { for(j=1; j<=N; j++) { Push(&s, j); } } printf("Output stack elements:"); StackTraverse(s,visit); Pop(&s,&e); printf("Pop element e=%d\n",e); printf("Is stack empty:%d(1:Y 0:N)\n",StackEmpty(s)); GetTop(s,&e); printf("Top element:e=%d Stack length:%d\n",e,StackLength(s)); ClearStack(&s); printf("After destroying stack, is stack empty:%d(1:Y 0:N )\n",StackEmpty(s)); DestroyStack(&s); printf("After destroying stack, s.top=%u s.base=%u s.stacksize=%d\n",s.top,s.base, s.stacksize);}// StackFunc.cpp// Created by Cooper on 23/10/2016.//#include "header.h"#ifndef STACK_STACKFUNC_CPP#define STACK_STACKFUNC_CPP/* 顺序栈(存储结构由c3-1.h定义)的基本操作(9个) */Status InitStack(SqStack *S){ /* 构造一个空栈S */ (*S).base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType)); if(!(*S).base) exit(OVERFLOW); /* 存储分配失败 */ (*S).top=(*S).base; (*S).stacksize=STACK_INIT_SIZE; return OK;}Status DestroyStack(SqStack *S){ /* 销毁栈S,S不再存在 */ free((*S).base); (*S).base=NULL; (*S).top=NULL; (*S).stacksize=0; return OK;}Status ClearStack(SqStack *S){ /* 把S置为空栈 */ (*S).top=(*S).base; return OK;}Status StackEmpty(SqStack S){ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ if(S.top==S.base) return TRUE; else return FALSE;}int StackLength(SqStack S){ /* 返回S的元素个数,即栈的长度 */ return S.top-S.base;}Status GetTop(SqStack S,ElemType *e){ /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */ if(S.top>S.base) { *e=*(S.top-1); return OK; } else return ERROR;}Status Push(SqStack *S,ElemType e){ /* 插入元素e为新的栈顶元素 */ if((*S).top-(*S).base>=(*S).stacksize) /* 栈满,追加存储空间 */ { (*S).base=(ElemType *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(ElemType)); /* 分配新的空间是将栈整体存入新的更大的存储空间,所以要用realloc()函数 */ if(!(*S).base) exit(OVERFLOW); /* 存储分配失败 */ (*S).top=(*S).base+(*S).stacksize; (*S).stacksize+=STACKINCREMENT; } *((*S).top)++=e; return OK;}Status Pop(SqStack *S,ElemType *e){ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ if((*S).top==(*S).base) return ERROR; *e=*--(*S).top; //先减一, 指向栈顶元素, 然后传值给e return OK;}Status StackTraverse(SqStack S,Status(*visit)(ElemType)){ /* 从栈底到栈顶依次对栈中每个元素调用函数visit()。 */ /* 一旦visit()失败,则操作失败 */ while(S.top>S.base) visit(*S.base++);//从栈底到栈顶遍历 printf("\n");//全部输出完毕后换行 return OK;}#endif //STACK_STACKFUNC_CPP头文件head.h/// Created by Cooper on 23/10/2016.//#ifndef STACK_HEADER_H#define STACK_HEADER_H#include <string.h>#include <ctype.h>#include <malloc.h>#include <limits.h>#include <stdio.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;/* 栈的顺序存储表示 */#define STACK_INIT_SIZE 10#define STACKINCREMENT 2typedef struct SqStack{ ElemType *base; //在栈构造之前和销毁之后,base的值为NULL ElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间, 以元素为单位}SqStack; //顺序栈/* 使用指针传参的函数 */Status InitStack(SqStack *S);Status StackTraverse(SqStack S,Status(*visit)(ElemType));Status Pop(SqStack *S,ElemType *e);Status Push(SqStack *S,ElemType e);Status GetTop(SqStack S,ElemType *e);int StackLength(SqStack S);Status StackEmpty(SqStack S) ;Status ClearStack(SqStack *S);Status DestroyStack(SqStack *S);Status visit(ElemType);/* 使用引用传参的函数 *///Status InitStack(SqStack &S);//Status StackTraverse(SqStack S,Status(*visit)(ElemType));//Status Pop(SqStack &S,ElemType &e);//Status Push(SqStack &S,ElemType e);//Status GetTop(SqStack S,ElemType &e);//int StackLength(SqStack S);//Status StackEmpty(SqStack S) ;//Status ClearStack(SqStack &S);//Status DestroyStack(SqStack &S);//Status visit(ElemType);
0 0
- 栈的实现 (数据结构 严蔚敏 清华大学出版社 第三章 抽象数据类型 成功编译并运行)
- 数据结构 严蔚敏 清华大学出版社 第二章 抽象数据类型 链表的实现 成功编译并运行
- 数据结构 严蔚敏 清华大学出版社 第一章 抽象数据类型 三元组的实现 成功编译并运行
- 数据结构 严蔚敏 清华大学出版社 第一章 抽象数据类型 三元组的实现 成功编译并运行
- 清华大学出版社 数据结构(C语言版)的实现
- 数据结构教程 第二课 抽象数据类型的表示与实现
- 数据结构--抽象数据类型(ADT)的表示与实现
- 数据结构(一) 抽象数据类型的表示与实现
- 《大话数据结构》读书笔记之栈抽象数据类型(数组实现)
- 数据结构(严蔚敏)抽象数据类型Triplet的表示与实现(第一章)
- 第1章 绪论(数据结构(C语言版)---清华大学出版社---严蔚敏,吴伟民)
- 第三章 编译并运行第一个程序
- python数据结构与算法 3栈的抽象数据类型
- 数据结构(scheme) -- 抽象数据类型(ADT) -- 栈
- 数据结构0 抽象数据类型
- 数据结构和抽象数据类型
- [数据结构]抽象数据类型&算法
- [数据结构]抽象数据类型&算法
- 从零搭建vue工程(vue-router,webpack)
- 点击菜单背景颜色来回切换
- OpenCV_基于HOG特征的行人检测
- Android实战技巧:为从右向左语言定义复杂字串
- ubuntu 14.04下安装protobuf2.6.1
- 栈的实现 (数据结构 严蔚敏 清华大学出版社 第三章 抽象数据类型 成功编译并运行)
- 需求评审要求
- 一个页面从输入URL到页面加载显示完成,这个过程都发生什么?
- Java面试题全集(上)
- git版本管理工具用法介绍
- 如何在html中嵌入多媒体对象(pdf,word,flash等,)很有用的,记下
- 1479数据结构实验之栈:行编辑器
- 3540: [Usaco2014 Open]Fair Photography
- This Is Why They Call It a Weakly-Ordered CPU