栈的类型定义与基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

栈的类型定义与基本

操作

Revised on November 25, 2020

循环队链的出队

bool Dequeue( CSQueue &q, QElemType &e ) {

int front;

if( == 0 )

return false;

front = ( + 1 - + MAXQSIZE ) % MAXQSIZE;

e = [ front ];

--;

return true;

}

循环队链的入队

bool Enqueue( CSQueue &q, QElemType e )

{

if( == MAXQSIZE )

return false;

= ( + 1 ) % MAXQSIZE;

[ ] = e;

++;

return true;

}

链队的入队

void Enqueue( LQueue &q, QElemType e )

{

LQueuePtr p;

p = new QNode;

p->data = e;

p->next = >next;

>next = p;

= p;

}

链队的出队

bool Dequeue( LQueue &q, QElemType &e )

{

LQueuePtr p;

if( >next == )

return false;

p = >next;

e = p->next->data;

>next = p->next;

delete p;

return true;

}

顺序栈的类型定义与基本操作:

const StackInitSize=100;

const StackInc=10;

struct SStack {

SElemType *base,*top; isited=false;

for(i=1;i<=;i++)

if(![i].visited)

{

visit[i].data);

[i].visited=true;

Enqueue(q,i);

while(Dequeue(q,j))

for(p=[j].firstarc;p;p=p->nextarc)

{

k=p->adjvex;

if(![k].visited)

{

visit(G>Vexs[k].data);

[k].visited=true;

Enqueue;

}

}

}

}

深度优先搜索遍历

void DFS(ALGraph &G, int i, void visit(VexType)) { int j;

Arcptr p;

visit[i].data);

[i].visited=true;

for(p=[i].firstarc ;p; p=p->nextarc)

{

J=p->adjvex;

if(![j].visited)

DFS(G,j,visit);

}

}

相关文档
最新文档