![](https://csdnimg.cn/release/download_crawler_static/4102223/bg7.jpg)
ElemType top (twostack *s,int i)
// 两栈共享向量空间 ,i 是 0 或 1 ,表示两个栈,本算法是取栈顶元素操作
{ ElemType x;
switch (i)
{case 0: if(s->top[0]==-1) return(0);// 栈空
else x=s->v[s->top]; break;
case 1: if(s->top[1]==m) return(0);// 栈空
else x=s->v[s->top]; break;
default: printf( “ 栈编号输入错误 ” );return(0);
}
return(x); // 取栈顶元素成功
} // 算法结束
3 . 6
void Ackerman(int m,int n)
// Ackerman 函数的递归算法
{ if (m==0) return(n+1);
else if (m!=0 && n==0) return(Ackerman(m-1,1);
else return(Ackerman(m-1,Ackerman(m,n-1))
} // 算法结束
3 . 7
(1) linklist *init(linklist *q)
// q 是以带头结点的循环链表表示的队列的尾指针,本算法将队列置空
{ q=(linklist *)malloc(sizeof(linklist));// 申请空间,不判断空间溢出
q->next=q;
return (q);
} // 算法结束
(2) linklist *enqueue(linklist *q , ElemType x)
// q 是以带头结点的循环链表表示的队列的尾指针,本算法将元素 x 入队
{ s=(linklist *)malloc(sizeof(linklist));// 申请空间,不判断空间溢出
s->next=q->next; // 将元素结点 s 入队列
q->next=s;
q=s; // 修改队尾指针
return (q);
} // 算法结束
(3) linklist *delqueue(linklist *q)
//q 是以带头结点的循环链表表示的队列的尾指针,这是出队算法
{ if (q==q->next) return (null); // 判断队列是否为空
else {linklist *s=q->next->next; // s 指向出队元素
if (s==q) q=q->next; // 若队列中只一个元素,置空队列
else q->next->next=s->next;// 修改队头元素指针
free (s); // 释放出队结点
}
return (q);
} // 算法结束。算法并未返回出队元素
3.8
typedef struct
{ElemType data[m];// 循环队列占 m 个存储单元