栈的类型定义与基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);
}
}