实现:一维数组 s[M]
栈满 栈空
top
5 top F 5 5
4 top E 4 4
3 top D 3 3
top 2
2 top C 2
top B 1
1 top B 1
top top A 0
base 0 top A 0 base
base 出栈
空栈 进栈
栈底指针 b a s e , 始 设数组维数为 M
终指向栈底位置; to p =b a s e , 栈空,此时出栈,
栈顶指针 to p , 其初 则下溢( und e rflo w)
值指向栈底,始终
在栈顶元素的下一
to p =M, 栈满,此时入栈,则
个位置 上溢( o ve rflo w)
10.
Status InitStack (SqStack&S)
{// 构造一个空栈 S
S.base=(SElemType*)malloc(STACK_INIT_SIZ
E *sizeof(SElemType));
if (!S.base) exit (OVERFLOW); // 存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status Pop (SqStack&S, SElemType &e) {
// 若栈不空,则删除 S 的栈顶元素,
// 用 e 返回其值,并返回 OK ;
// 否则返回 ERROR
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
}
算法描述
说明 : 当前位置可通, 指未曾走到过的通道
块 , 即要求该通道块既不在当前路径上 , 也
不是曾经纳入过路径的通道块 .
a
起点 a-b-c-f-g ( 简单路径 )
b
d c a-b-c-d-e-c-f-g ( 非简单路径
f ) 若 b 已经纳入过路径 , 则在当
e
前位置为 f 时 , 将不作为可通
终点 g 位置考虑 , 否则 , 将形成死循
环.
空
队 ^ Q.rear -> next=p
front rear p Q.rear=p
x 入队 x ^
front rear p
y 入队 x y ^
front rear
p
x 出队 x y ^
front rear
y 出队 ^ p= Q.front -> next
Q.front -> next = p -> next
front ear
r