数据结构习题集答案(C语言版严蔚敏) 下载本文

akm(1

3) 6 1 3 g=akm(1

2); akm(m-1

g)

2

akm(1

2) 6 1 2 g=akm(1

1); akm(m-1

g)

3

akm(1

1) 6 1 1 g=akm(1

0)=2; akm(m-1

g)=akm(0

2)

4

akm(0

2) 7 0 2 akm=n+1=3 退栈

akm(2

1) 0 2 1 g=akm(2

0)=3; akm=akm(1

3)

1

akm(1

3) 6 1 3 g=akm(1

2); akm(m-1

g)

2

akm(1

2) 6 1 2 g=akm(1

1); akm(m-1

g)

3

akm(1

1) 6 1 1 g=akm(1

0)=2; akm(m-1

g)=akm(0

2)=3退栈

akm(2

1) 0 2 1 g=akm(2

0)=3; akm=akm(1

3)

1

akm(1

3) 6 1 3 g=akm(1

2); akm(m-1

g)

2

akm(1

2) 6 1 2 g=akm(1

1)=3; akm(m-1

g)=akm(0

3)

3

akm(0

3) 7 0 3 akm=n+1=4 退栈

akm(2

1) 0 2 1 g=akm(2

0)=3; akm=akm(1

3)

1

akm(1

3) 6 1 3 g=akm(1

2); akm(m-1

g)

2

akm(1

2) 6 1 2 g=akm(1

1)=3; akm(m-1

g)=akm(0

3)=4 退栈

akm(2

1) 0 2 1 g=akm(2

0)=3; akm=akm(1

3)

1

akm(1

3) 6 1 3 g=akm(1

2)=4; akm(m-1

g)=akm(0

4)

2

akm(0

4) 7 0 4 akm=n+1=5 退栈

akm(2

1) 0 2 1 g=akm(2

0)=3; akm=akm(1

3)

1

akm(1

3) 6 1 3 g=akm(1

2)=4; akm(m-1

g)=akm(0

4)=5退栈

akm(2

1) 0 2 1 g=akm(2

0)=3; akm=akm(1

3)=5退栈

akm(2

1)=5;

3.28 假设以带头结点的循环链表表示队列

并且只设一个指针指向队尾元素结点(注意不设头指针) 试编写相应的队列初始化、入队列何处队列的算法

解:

typedef int ElemType;

typedef struct NodeType{

ElemType data;

NodeType *next;

}QNode

*QPtr;

typedef struct{

QPtr rear;

int size;

}Queue;

Status InitQueue(Queue& q)

{

q.rear=NULL;

q.size=0;

return OK;

}

Status EnQueue(Queue& q

ElemType e)

{

QPtr p;

p=new QNode;

if(!p) return FALSE;

p->data=e;

if(!q.rear){

q.rear=p;

p->next=q.rear;

}

else{

p->next=q.rear->next;

q.rear->next=p;

q.rear=p;

}

q.size++;

return OK;

}

Status DeQueue(Queue& q

ElemType& e)

{

QPtr p;

if(q.size==0)return FALSE;

if(q.size==1){

p=q.rear;

e=p->data;

q.rear=NULL;

delete p;

}

else{

p=q.rear->next;

e=p->data;

q.rear->next=p->next;

delete p;

}

q.size--;

return OK;

}

3.29 如果希望循环队列中的元素都能得到利用 则需设置一个标志域tag

并以tag的值为0和1来区分