- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
栈和队列(数据结构)
顺序栈的定义
typedef struct {
ElemType *base; //栈底指针
ElemType *top; //栈顶指针
int stacksize; //当前分配的存储容量
} SqStack; //顺序栈结构类型
构造一个空栈
InitStack(SqStack S) {
S.base=(ElemType *) malloc
(INIT_SIZE*sizeof(ElemType));
S.top=S.base; //空栈
S.stacktsize=INIT_SIZE; //初始存储容量
} // InitStack
进栈
Push(SqStack S, ElemType e) {
if ( S.top-S.base=S.stacksize )
{
//当前存储空间已满,需增加容量:
S.base=(ElemType *) realloc( S.base, (S.stacksize+INCREMENT) * sizeof(ElemType) );
S.top=S.base+S.stacksize;
S.stacktsize+=INCREMENT;
}
*S.top++=e; //压入数据元素e,top+1
} // Push
出栈
Pop(SqStack S, ElemType e) {
if ( S.top!=S.base ) e=*- -S.top;
} // Pop
链栈的定义
typedef struct SNode {
ElemType data; //数据域
struct SNode *next; //指针域
} SNode, *LinkStack;
进栈
Push(LinkStack S, ElemType e) {
p=(LinkStack) malloc( sizeof(SNode) );
p-data=e; //压入数据元素e
p-next=S-next; //将新结点链入S中
S-next=p; //S指向新结点
} // Push
出栈
Pop(LinkStack S, ElemType e) {
p=S-next;
S-next=p-next; //修改链接指针
e=p-data; //弹出栈顶元素
free(p); //释放p结点
} // Pop
//将10进制数n转换成指定的d进制数(2~9)
Conversion(int n, int d) {
InitStack(S); //构造空链栈S
while (n) { Push(S, n%d); n/=d; }
Print(S); //输出转换结果
} // Conversion
顺序队列
typedef struct {
ElemType *front; //队首指针
ElemType *rear; //队尾指针
int queuesize; //当前分配的存储容量
} SqQueue; //顺序队列结构类型
构造空的顺序队列
InitQueue(SqQueue Q) {
Q.front=(ElemType *) malloc (QueueInitsize*sizeof(ElemType));
Q.rear=Q.front; //空队列
Q.queuesize=QueueInitsize; //初始存储容量
} // InitQueue
入队
InQueue(SqQueue Q, ElemType e) {
if (Q.rear-Q.front=Q.queuesize) {
Q.front=(ElemType *) realloc
(Q.front, Q.queuesize+QueueIncrement)
*sizeof(ElemType));//重新分配
Q.rear=Q.front+Q.Queuesize;
Q.Queuesize+=QueueIncrement;}
*Q.rear++=e; //在队尾插入数据元素e,rear+1
} // InQueue
出队
OutQueue(SqQueue Q, ElemType e) {
if (Q.rear!=Q.front) {
e=*Q.front;
Q.front++;
}
} // OutQueue
链队列的定义
typedef struct QNode {
ElemType data; //数据域
struct QNode *next; //指针域
} QNode, *LinkQueue; //链队列结构类型
建立空链队列
文档评论(0)