第六周 项目1-建立顺序栈算法库
2015-10-09 08:26
246 查看
/*
*Copyright (c) 2015 烟台大学计算机与控制工程学院
*All right reserved.
*文件名称:shunxuzhan.cpp
*作者:孙钰坤
*完成日期:2015年10月9日
*问题描述:定义顺序栈存储结构,实现其基本运算,并完成测试。头文件:sqstack.h,
包含定义顺序栈数据结构的代码、宏定义、要实现算法的函数的声明;源文件:sqstack.cpp,
包含实现各种算法的函数的定义在同一项目(project)中建立一个源文件(如main.cpp),
编制main函数,完成相关的测试工作。
*/
运算结果:
心得体会:栈是最常用和最重要的数据结构之一,从数据结构的定义来看,栈属于线性表的一种,与线性表的不同在于栈的插入,删除和运算均受某种特殊限制。栈可以采用顺序存储结构,分配一块连续的存储区域来存放栈中元素,并用一个变量指向当前的栈顶元素以反映栈中元素的变化。采用顺序存储的栈叫做顺序栈。
*Copyright (c) 2015 烟台大学计算机与控制工程学院
*All right reserved.
*文件名称:shunxuzhan.cpp
*作者:孙钰坤
*完成日期:2015年10月9日
*问题描述:定义顺序栈存储结构,实现其基本运算,并完成测试。头文件:sqstack.h,
包含定义顺序栈数据结构的代码、宏定义、要实现算法的函数的声明;源文件:sqstack.cpp,
包含实现各种算法的函数的定义在同一项目(project)中建立一个源文件(如main.cpp),
编制main函数,完成相关的测试工作。
*/
#ifndef SQSTACK_H_INCLUDED #define SQSTACK_H_INCLUDED #define MaxSize 100 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int top; //栈指针 } SqStack; //顺序栈类型定义 void InitStack(SqStack *&s); //初始化栈 void DestroyStack(SqStack *&s); //销毁栈 bool StackEmpty(SqStack *s); //栈是否为空 int StackLength(SqStack *s); //返回栈中元素个数——栈长度 bool Push(SqStack *&s,ElemType e); //入栈 bool Pop(SqStack *&s,ElemType &e); //出栈 bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素 void DispStack(SqStack *s); //输出栈 #endif // SQSTACK_H_INCLUDED #include <stdio.h> #include <malloc.h> void InitStack(SqStack *&s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } void DestroyStack(SqStack *&s) { free(s); } int StackLength(SqStack *s) //返回栈中元素个数——栈长度 { return(s->top+1); } bool StackEmpty(SqStack *s) { return(s->top==-1); } bool Push(SqStack *&s,ElemType e) { if (s->top==MaxSize-1) //栈满的情况,即栈上溢出 return false; s->top++; s->data[s->top]=e; return true; } bool Pop(SqStack *&s,ElemType &e) { if (s->top==-1) //栈为空的情况,即栈下溢出 return false; e=s->data[s->top]; s->top--; return true; } bool GetTop(SqStack *s,ElemType &e) { if (s->top==-1) //栈为空的情况,即栈下溢出 return false; e=s->data[s->top]; return true; } void DispStack(SqStack *s) //输出栈 { int i; for (i=s->top;i>=0;i--) printf("%c ",s->data[i]); printf("\n"); } #include <stdio.h> int main() { ElemType e; SqStack *s; printf("(1)初始化栈s\n"); InitStack(s); printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空")); printf("(3)依次进栈元素a,b,c,d,e\n"); Push(s,'a'); Push(s,'b'); Push(s,'c'); Push(s,'d'); Push(s,'e'); printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空")); printf("(5)栈长度:%d\n",StackLength(s)); printf("(6)从栈顶到栈底元素:");DispStack(s); printf("(7)出栈序列:"); while (!StackEmpty(s)) { Pop(s,e); printf("%c ",e); } printf("\n"); printf("(8)栈为%s\n",(StackEmpty(s)?"空":"非空")); printf("(9)释放栈\n"); DestroyStack(s); return 0; }
运算结果:
心得体会:栈是最常用和最重要的数据结构之一,从数据结构的定义来看,栈属于线性表的一种,与线性表的不同在于栈的插入,删除和运算均受某种特殊限制。栈可以采用顺序存储结构,分配一块连续的存储区域来存放栈中元素,并用一个变量指向当前的栈顶元素以反映栈中元素的变化。采用顺序存储的栈叫做顺序栈。
相关文章推荐
- 第四周项目3-单链表应用(1)
- 加载图片的几种方式
- ECS Linux开启swap(虚拟内存)
- 第四周 项目二-建立单链表算法库
- 2015-10-9 【项目1 - 建立顺序栈算法库】
- Freecms商业版 oracle添加信息时报错”转换请求无法实施或不合理”
- 第四周项目3 单链表应用(1)
- 第四周项目六-多项式求和
- 【第6周 项目1 - 建立顺序栈算法库】
- 第6周项目1 - 建立顺序栈算法库
- 洛谷P1126 机器人搬重物
- 第3周项目1 顺序表的基本运算(2)
- 第6周 项目1-建立顺序栈算法库
- 第4周实践项目2-单链表
- 第四周实践项目3--单链表应用(2)
- 类模板 与 模板类 http://www.cnblogs.com/this-543273659/archive/2011/07/21/2112358.html
- ReactiveCocoa<一>
- 项目3 -- 括号的匹配 顺序栈方法
- 开源好丑陋,需要设计师改善UI和UX
- 七年未尽之旅:中美BIT谈判