- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构《第三章》例题与习题程序代码
《数据结构》第3 章、栈和队列
《第三章、栈和队列》
例题以及部分习题的程序代码
3.1 栈的定义与基本操作的存储和实现
3.1.2 栈的顺序存储和基本操作的实现
1 顺序栈存储结构的定义
说明:由于栈的插入和删除操作仅在栈顶进行,不需要移动栈中的其它元素,所
以用顺序存储结构表示一个栈最为有利。
在C++语言中用以下结构类型来表示顺序栈。
#includeiostream.h //将C++中输入输出流库的头文件包含进来
typedef int SEType;
//为了方便上机调试程序本章假定栈中的数据元素的类型SEType 为int类型数据
const int INITSIZE=100; //定义顺序栈存储空间的初始分配常量
const int SINC=10; //定义顺序栈存储空间的扩充常量
struct SqStack{ //定义顺序栈的结构类型为SqStack
SEType *base; //栈中存储空间的基址
SEType *top; //栈顶指针
int stacksize; // 当前栈的存储容量(以元素为单位)
int incsize; //每次增补容量的大小
};
说明:判断一个顺序栈为空的条件是base==top, 即它们同时指向栈底。
2 顺序栈中基本操作的实现
(1)置空栈StackInit (S )
void StackInit_Sq(SqStack S,int ssize=INITSIZE,int incsize=SINC)
{ S.base=new SEType[ssize];
S.stacksize=ssize;
S.top=S.base;
S.incsize=incsize;
}
(2 )进栈Push(S,e)
void IncSize(SqStack S)
{ S.stacksize+=S.incsize; //容量增加
SEType* a=new SEType[S.stacksize]; //分配空间
SEType *p=S.base,*q=a;
while(pS.top)*q++=*p++; //将S.base 中的数据移到a 中
S.top=q; //设置栈顶指针
delete[]S.base;
S.base=a;
1 / 15
2010 年10 月23 日
第3 章、例题与部分习题的程序代码
}
void Push_Sq(SqStack S,SEType e)
{ if(S.top==S.base+S.stacksize)
IncSize(S);
*S.top++=e;
}
(3 )取栈顶元素GetElem(S,e) (5 )遍历Traverse (S )
int GetElem(SqStack S,SEType e) void TraverseStack_Sq(SqStack S)
{ if(S.base==S.top)return 0; { SEType* p=S.top;
e=*(S.top-1); if(S.top==S.base)
return 1; { cout 当前为空栈!
} \n;return;}
(4 )出栈
文档评论(0)