当前位置: 首页 > news >正文

太原做网站联系方式郑州网站制作郑州网站制作

太原做网站联系方式,郑州网站制作郑州网站制作,智能手机软件开发,wordpress如何清空目录 1. 前言2. 结构及基本操作函数#xff1a;2.1 栈的结构类型 Stack2.2 初始化栈 InitStack2.3 销毁栈 DestroyStack2.4 清空栈 ClearStack2.5 判断栈是否为空 StackEmpty2.6 获取stack的长度 StackLength2.7 获取栈顶元素 GetTop2.8 入栈 Push2.9 出栈 Pop2.10 访问元素2.… 目录 1. 前言2. 结构及基本操作函数2.1 栈的结构类型 Stack2.2 初始化栈 InitStack2.3 销毁栈 DestroyStack2.4 清空栈 ClearStack2.5 判断栈是否为空 StackEmpty2.6 获取stack的长度 StackLength2.7 获取栈顶元素 GetTop2.8 入栈 Push2.9 出栈 Pop2.10 访问元素2.11 遍历栈的所有元素 3. 严蔚敏版完整测试代码:3.1 代码3.2 运行结果: 4. 简易版完整测试代码4.1 完整代码4.2 运行结果 5. 栈的应用 进制转化5.1 转化函数5.2 进制转化完整代码5.3 运行结果 1. 前言 栈的操作思想先进后出 本文的基本操作函数使用 严蔚敏版的《数据结构与算法》中的实现方式。此方式可以实现动态的分配栈空间内存。 本文还有一个更为简单的栈操作方式虽简单但是就失去了动态分配栈空间内存的优势。栈空间的最大值会被限制。 对比之下严教授的编程思想还是比一般人厉害。 入栈和出栈的示意图 2. 结构及基本操作函数 2.1 栈的结构类型 Stack typedef struct Stack{SElemType * base; //栈底指针SElemType * top; //栈顶指针int stacksize; //当前已分配的存储空间 } SqStack;2.2 初始化栈 InitStack 功能 初始化栈 分配栈底内存空间栈空间大小设置初始值 /*初始化栈*/ Status InitStack(SqStack * stack) {stack-base (SElemType * )malloc(STACK_INIT_SIZE* sizeof(SElemType));if(!stack-base)exit(EXIT_FAILURE);stack-topstack-base; // 栈顶指针初始 指向栈底;stack-stacksizeSTACK_INIT_SIZE;return TRUE; }2.3 销毁栈 DestroyStack 功能销毁栈释放内存空间 /*销毁栈 */ Status DestroyStack(SqStack * stack) {free(stack-base);stack-topstack-baseNULL;stack-stacksize0;return TRUE; }2.4 清空栈 ClearStack 功能 清空栈内数据区别于销毁栈的释放内存。只需要将栈顶指针等于栈底指针 /* 清理stack,只需要将top指针指向base*/ Status ClearStack(SqStack * stack) {stack-topstack-base;return TRUE; }2.5 判断栈是否为空 StackEmpty 功能 判断栈是否为空在实际应用中这个函数经常要用到 /* 判断栈是否为空 */ Status StackEmpty(SqStack stack) {if(stack.base stack.top)return TRUE;else return FALSE; }2.6 获取stack的长度 StackLength /* 获取stack的长度 */ int StackLength(SqStack stack) {return stack.top - stack.base; }2.7 获取栈顶元素 GetTop 功能 获取栈顶元素并将值传递给 e注意区别于下面的pop函数,GetTop是不改变栈的元素。 /* 获取栈顶元素并将值传递给 e*/ Status GetTop(SqStack stack, SElemType * e) {if(StackEmpty(stack))return FALSE;*e *--stack.top; }2.8 入栈 Push 功能 入栈, 将元素e压入栈中。这里面就涉及到一个扩容问题如果栈的空间不够可以增加栈的内存空间。 /*入栈, 将元素e压入栈中 */ Status Push(SqStack * stack,SElemType e) {if(stack-top - stack-base stack-stacksize)//如果空间不够的话扩容{stack-base (SElemType *) realloc(stack-base,(stack-stacksizeSTACKINCREMENT)* sizeof(SElemType));if(!stack-base)exit(EXIT_FAILURE);stack-stacksize STACKINCREMENT;}*stack-top e;return TRUE; }示意图 : 2.9 出栈 Pop /*出栈 从栈顶弹出元素并将元素值传递给e*/ Status Pop(SqStack * stack ,SElemType * e) {if(!stack-base)return FALSE;if(stack-base stack-top) //空栈return FALSE;*e *(--stack-top);return TRUE; }示意图 以上的函数在各类实际应用中基本都不用修改可以直接使用。下面还有两个函数栈元素的访问一般在实际应用中根据需要自行的灵活修改。 2.10 访问元素 功能 访问元素因为是测试用的所以打印就行了 /* 访问元素 */ void Visit(SElemType e) {printf(%d\t, e); }2.11 遍历栈的所有元素 功能遍历stack,对stack的每一个元素调用visit函数。 /* 遍历stack,对stack的每一个元素调用visit函数 */ Status StackTraverse(SqStack stack,void (*visit)(SElemType e)) {SElemType * curElemstack.base;if(StackEmpty(stack))return FALSE;while(curElem!stack.top)visit(*curElem);return TRUE; }3. 严蔚敏版完整测试代码: 3.1 代码 /*此版本为严蔚敏老师版本此版本栈的空间大小可以*/#include stdio.h #include stdlib.h#define STACK_INIT_SIZE 100 //初始内存空间 #define STACKINCREMENT 10 // 内存空间增量#define TRUE 1 #define FALSE 0typedef int SElemType;typedef struct Stack{SElemType *base; //栈底指针SElemType * top; //栈顶指针int stacksize; //当前已分配的存储空间 } SqStack;typedef int Status;Status InitStack(SqStack * stack); Status DestroyStack(SqStack * stack); Status ClearStack(SqStack * stack); Status StackEmpty(SqStack stack); int StackLength(SqStack stack); Status GetTop(SqStack stack, SElemType * e); Status Push(SqStack * stack,SElemType e); Status Pop(SqStack * stack, SElemType *e); void Visit(SElemType e); Status StackTraverse(SqStack stack,void (*visit)(SElemType));/*初始化栈*/ Status InitStack(SqStack * stack) {stack-base (SElemType * )malloc(STACK_INIT_SIZE* sizeof(SElemType));if(!stack-base)exit(EXIT_FAILURE);stack-topstack-base; // 栈顶指针初始 指向栈底;stack-stacksizeSTACK_INIT_SIZE;return TRUE; }/*销毁栈 */ Status DestroyStack(SqStack * stack) {free(stack-base);stack-topstack-baseNULL;stack-stacksize0;return TRUE; } /* 清理stack,只需要将top指针指向base*/ Status ClearStack(SqStack * stack) {stack-topstack-base;return TRUE; }/* 判断栈是否为空 */ Status StackEmpty(SqStack stack) {if(stack.base stack.top)return TRUE;else return FALSE; }/* 获取stack的长度 */ int StackLength(SqStack stack) {return stack.top - stack.base; }/* 获取栈顶元素并将值传递给 e*/ Status GetTop(SqStack stack, SElemType * e) {if(StackEmpty(stack))return FALSE;*e *--stack.top; }/*入栈, 将元素e压入栈中 */ Status Push(SqStack * stack,SElemType e) {if(stack-top - stack-base stack-stacksize)//如果空间不够的话扩容{stack-base (SElemType *) realloc(stack-base,(stack-stacksizeSTACKINCREMENT)* sizeof(SElemType));if(!stack-base)exit(EXIT_FAILURE);stack-stacksize STACKINCREMENT;}*stack-top e;return TRUE; } /*出栈 从栈顶弹出元素并将元素值传递给e*/ Status Pop(SqStack * stack ,SElemType * e) {if(!stack-base)return FALSE;if(stack-base stack-top) //空栈return FALSE;*e *(--stack-top);return TRUE; }/* 访问元素 */ void Visit(SElemType e) {printf(%d\t, e); }/* 遍历stack,对stack的每一个元素调用visit函数 */ Status StackTraverse(SqStack stack,void (*visit)(SElemType e)) {SElemType * curElemstack.base;if(StackEmpty(stack))return FALSE;while(curElem!stack.top)visit(*curElem);return TRUE;}int main() {SqStack stack;SElemType elem;InitStack(stack);printf(压入数字1、2、3\n);Push(stack,1);Push(stack,2);Push(stack,3);printf(当前栈的容量:%d\n,StackLength(stack));GetTop(stack,elem);printf(栈顶元素为:%d\n,elem);printf(将4、5压入栈中\n);Push(stack,4);Push(stack,5);Pop(stack,elem);printf(弹出栈顶元素为:%d\n,elem);printf(当前栈的容量:%d\n,StackLength(stack));printf(遍历栈:);StackTraverse(stack,Visit);printf(\n);DestroyStack(stack);getchar();return 0; }3.2 运行结果: 4. 简易版完整测试代码 简易版无法动态的给栈扩容 4.1 完整代码 /*此版本为简易版本*/#include stdio.h #include stdlib.h#define TRUE 1 #define FALSE 0 #define MAXSIZE 30typedef int Status;typedef int ElemType; //定义元素类型为整型 typedef struct{ElemType * base; //在栈构造之前和销毁之后base的值均为NULLint top; }SqStack;/*初始化栈为栈分配空间*/ Status InitStack(SqStack * stack) {stack-base(ElemType*) malloc(sizeof(ElemType)*MAXSIZE);if(stack-baseNULL)return FALSE;stack-top -1; //初始值可以是-1,也可以设置为0。//如果设置为-1那么当栈不为空时 栈顶元素为 stack-base[top]//如果设置为0 那么当栈不为空时 栈顶元素为 stack-base[top-1]return TRUE; }/*销毁栈释放栈的数据空间*/ void DestroyStack(SqStack *stack) {free(stack-base);stack-baseNULL;stack-top -1; }/* 获取栈顶元素 */ Status GetTop(SqStack stack, ElemType * elem) {if(stack.top0)return FALSE;*elemstack.base[stack.top];return TRUE; }/* 压栈将元素elem 插入栈顶 */ Status Push(SqStack * stack,ElemType elem) {if(stack-top MAXSIZE-1) /*栈已经满了实际应用中可以动态扩展栈的空间*/return FALSE;stack-base[stack-top]elem;return TRUE; }/*出栈将栈顶元素elem出栈相当于删除栈顶元素 */ Status Pop(SqStack * stack,ElemType * elem) {if(stack-top0)return FALSE;*elemstack-base[stack-top--];return TRUE; }int main () {SqStack stack;ElemType * elem(ElemType*)malloc(sizeof(ElemType));InitStack(stack);printf(压入数字1、2、3\n);Push(stack,1);Push(stack,2);Push(stack,3);printf(当前栈的容量:%d\n,stack.top1);GetTop(stack,elem);printf(栈顶元素为:%d\n,*elem);printf(将4、5压入栈中\n);Push(stack,4);Push(stack,5);Pop(stack,elem);printf(弹出栈顶元素为:%d\n,*elem);printf(当前栈的容量:%d\n,stack.top1);printf(\n);DestroyStack(stack);free(elem);getchar();return 0; }4.2 运行结果 5. 栈的应用 进制转化 5.1 转化函数 此函数是将10进制的数据 转化为2进制或者8进制 。/* 十进制制转换成8进制或2进制* 参数radix 进制数如果要转换成2进制则输入2如果转换成8进制则radix8* 参数n 待转换的十进制数 */ void conversion(int radix,int n) {SqStack stack;int elem;InitStack(stack);while(n){Push(stack,n%radix); // 将余数入栈nn/radix; // 商做为被除数进行下一个循环只要商不为0就继续除下去)}while(!StackEmpty(stack)){ //从栈中将余数依次取出。Pop(stack ,elem);printf(%d,elem);}printf(\n); }5.2 进制转化完整代码 #include stdio.h #include stdlib.h#define STACK_INIT_SIZE 100 //初始内存空间 #define STACKINCREMENT 10 // 内存空间增量#define TRUE 1 #define FALSE 0typedef int Status;typedef int SElemType;typedef struct Stack{SElemType *base; //栈底指针SElemType * top; //栈顶指针int stacksize; //当前已分配的存储空间 } SqStack;Status InitStack(SqStack * stack); Status DestroyStack(SqStack * stack); Status ClearStack(SqStack * stack); Status StackEmpty(SqStack stack); int StackLength(SqStack stack); Status GetTop(SqStack stack, SElemType * e); Status Push(SqStack * stack,SElemType e); Status Pop(SqStack * stack, SElemType *e); void Visit(SElemType e); Status StackTraverse(SqStack stack,void (*visit)(SElemType));/*初始化栈*/ Status InitStack(SqStack * stack) {stack-base (SElemType * )malloc(STACK_INIT_SIZE* sizeof(SElemType));if(!stack-base)exit(EXIT_FAILURE);stack-topstack-base; // 栈顶指针初始 指向栈底;stack-stacksizeSTACK_INIT_SIZE;return TRUE; }/*销毁栈 */ Status DestroyStack(SqStack * stack) {free(stack-base);stack-topstack-baseNULL;stack-stacksize0;return TRUE; } /* 清理stack,只需要将top指针指向base*/ Status ClearStack(SqStack * stack) {stack-topstack-base;return TRUE; }/* 判断栈是否为空 */ Status StackEmpty(SqStack stack) {if(stack.base stack.top)return TRUE;else return FALSE; }/* 获取stack的长度 */ int StackLength(SqStack stack) {return stack.top - stack.base; }/* 获取栈顶元素并将值传递给 e*/ Status GetTop(SqStack stack, SElemType * e) {if(StackEmpty(stack))return FALSE;*e *--stack.top; }/*入栈, 将元素e压入栈中 */ Status Push(SqStack * stack,SElemType e) {if(stack-top - stack-base stack-stacksize)//如果空间不够的话扩容{stack-base (SElemType *) realloc(stack-base,(stack-stacksizeSTACKINCREMENT)* sizeof(SElemType));if(!stack-base)exit(EXIT_FAILURE);stack-stacksize STACKINCREMENT;}*stack-top e;return TRUE; } /*出栈 从栈顶弹出元素并将元素值传递给e*/ Status Pop(SqStack * stack ,SElemType * e) {if(!stack-base)return FALSE;if(stack-base stack-top) //空栈return FALSE;*e *(--stack-top);return TRUE; }/* 十进制制转换成8进制或2进制* 参数radix 进制数如果要转换成2进制则输入2如果转换成8进制则radix8* 参数n 待转换的十进制数 */ void conversion(int radix,int n) {SqStack stack;int elem;InitStack(stack);while(n){Push(stack,n%radix); // 将余数入栈nn/radix; // 商做为被除数进行下一个循环只要商不为0就继续除下去)}while(!StackEmpty(stack)){Pop(stack ,elem);printf(%d,elem);}printf(\n);}int main () {printf(将4转换为2进制);conversion(2,4);printf(将20转换为8进制);conversion(8,20);getchar();return 0; } 5.3 运行结果
http://www.hkea.cn/news/14424170/

相关文章:

  • 网页制作与网站建设完全学习手册下载怀柔区企业网站设计机构提供
  • 遵义仁怀网站建设下载天眼查企业查询官网
  • 莆田建设信息网站基于多站点的网站内容管理平台的管理与应用
  • 网站cms是什么意思如何看待响应式网页设计
  • 移动网站制作价格wordpress首页设置错误
  • 福州仓前网站建设个人做的网站
  • 周年庆网站要怎么做淘宝客网站怎么做优化
  • 胶州网站建设培训163企业邮箱服务器怎么设置
  • 网站转化率大学网站方案设计
  • 企业网站推广的方法有搜索引擎推广网站建设销售该学的
  • dede仿手机网站模板做旅游攻略的网站
  • 石家庄搭建网站专注软件优化分享的网站
  • 2019年10月电子商务网站设计遵义专业网站建设公司电话
  • 青岛市黄岛区建设局网站泉州大型网站建设
  • 平潭综合实验区交通与建设网站苏州互联网公司工资
  • 合肥专业网站制作网站建设及维护价钱
  • 南阳网站运营摄影设计思路
  • 外贸网站建设开发南京做网站哪家公司最好
  • 建个网站费用生产型或服务型企业网站有哪些
  • 东盟建设工程有限公司网站wordpress启动慢
  • 网站建设和实现外贸服装网站建设
  • 深圳罗湖建网站WordPress搭建连不上数据库
  • 北京网站开发最专业的公司wordpress 3.5下载
  • 家乡网站建设策划书视频外链平台
  • 织带东莞网站建设技术支持网站建设周志200字
  • 网站安全狗服务名wordpress 列表排序
  • ps怎么做网站的广告条wordpress 作品相册
  • 企业网站建设规划方案精美的网站
  • 网站 空间地址是什么亚马逊云服务器
  • 江苏营销型网站策划到底建手机网站还是电脑网站