首页 > 试题广场 >

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结

[填空题]

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,下面是相应的入队列和出队列算法,请在空缺处填写以完成功能。

typedef int ElemType;

typedef struct node {

ElemType data;

struct node *next;

}QueueNode, *LinkQueue;

int inQueue (LinkQueue &rear, ElemType x)// 入队

{

QueueNode *p=(QueueNode*)malloc(sizeof(QueueNode));

1

return 0;

p->data=x;

2 ;

3 ;

rear=p;

printf("\n%d 进队...\n", x);

return 1;

}

int delLinkQueue(LinkQueue &rear, ElemType &x)// 出队

{

if(rear==rear->next)

{

return 0;

}

QueueNode *p= 4 ;

5 ;

x=p->data;

if(rear==p)

6 ;

free(p);

return 1;

}

typedef int ElemType; typedef struct node { ElemType data; struct node *next; }QueueNode, *LinkQueue; //入队 int inQueue (LinkQueue &rear, ElemType x){ QueueNode *p=(QueueNode*)malloc(sizeof(QueueNode)); //创建一个新结点 (1) (没想到诶*罒▽罒*,链表动态分配存储空间,入队应该不用判满吧) return 0; p->data=x; //把数据放入新结点中 (2) p->next=rear->next; //p入队后作为尾指针,指向循环链表的头结点 (3)rear->next=p; //rear指向p,相当于在rear***入一个元素 rear=p; //此时rear应为新入队的尾结点 printf("\n%d 进队...\n", x); return 1; } //出队 int delLinkQueue(LinkQueue &rear, ElemType &x){ if(rear==rear->next) { return 0; //链表为空,返回0 } QueueNode *p= (4)rear->next->next; //p指向第一个元素(即头节点后面的第一个元素) (5)rear->next->next=p->next; //由于该链表不设头结点,用rear->next表示头结点,头结点后面元素出队 x=p->data; //元素数据返回x中 if(rear==p) (6)rear=rear->next; //若链表只有一个结点,删除后rear指向头结点 ; free(p); //释放空间 return 1; } /* 其实画个图就很清晰了! 如有问题,请大家及时指正^o^ */
编辑于 2020-12-06 18:37:51 回复(0)