没有m个连续单元供一个栈与队列使用,且栈与队列的实际占用单元数事先不知道,但是要求在任何时刻它们占用的单元数量不超过m,试写出上述栈与队列的插入算法。
参考答案:算法如下:
//定义结点的结构为
struct Node{
ElemType data;
struct Node* next;
//定义栈的结构
struct Stack{
Node* base;
Node* top;
}
//定义队列的结构
struct Queue{
Node* front;
Node* tail;
};
//设m个连续单元的数组为b[m],定义全局数组static int a[m]用以标识m个单元中各个单元是否被占用
//a[i]=A表示已占用,a[i]=0表示未被占用
void InsertStack(struct stack &S,ElemType elem)
{
for(int i=0;i<m;i++)
if(a[i]==0)
break;
if(i==m)
{
printf("NO SPACE\n");
return;
a[i]=A;
Node* P=&b[i]:
P->data=elem:
P->next=NULL:
if(S.base==NULL)
{
S.base=P;
S.top=P:
}
else
{
p->next=P;
S.top=P:
}
}
void InsertQueue(struct Queue &Q,ElemType elem)
{
for(int i=0;i<m;i++)
if(a[i]==0)
break;
if(i==m)
{
printf("NO SPACE\n");
return"
}
a[i]=A;
Node* P=&b[i];
P->data=elem;
P->next=NULL:
if(Q.front==NULL)
{
Q.front=p;
Q.tail=p;
}
else
{
Q.tail->next=P;
Q.tail=p;
}
}