数据结构之栈和队列---队列的基本操作

浅浅的花香味﹌ 2022-08-03 08:30 250阅读 0赞

问题:实现队列的基本操作,内容包括队列的结构体,队列的初始化,队列的销毁,进队操作及出队操作

//队列节点的结构体

  1. typedef struct QNode
  2. {
  3. ElemType data;
  4. struct QNode *next;
  5. }QNode, *QPoint;

//队列链的结构体

  1. typedef struct LinkQueue
  2. {
  3. QPoint front;
  4. QPoint rear;
  5. }LinkQueue;

// 队列的初始化

//lq->front分配空间时,类型为QPoint,但大小为QNode,不要把大小写成QPoint

  1. LinkQueue* InitQueue()
  2. {
  3. LinkQueue *lq;
  4. lq = (LinkQueue *)malloc(sizeof(LinkQueue));
  5. lq->front = (QPoint)malloc(sizeof(QNode));
  6. lq->rear = lq->front;
  7. return lq;
  8. }

//队列的销毁

  1. void DestroyQueue(LinkQueue *lq)
  2. {
  3. while (lq->front)
  4. {
  5. lq->rear = lq->front->next;
  6. free(lq->front);
  7. lq->front = lq->rear;
  8. }
  9. free(lq);
  10. }

// 进队操作

//队首不存放元素

  1. void EnQueue(LinkQueue *lq, ElemType elem)
  2. {
  3. QPoint qn = (QPoint)malloc(sizeof(QNode));
  4. qn->data = elem;
  5. qn->next = NULL;
  6. lq->rear->next = qn;
  7. lq->rear = qn;
  8. }

// 出队操作

  1. int DeQueue(LinkQueue *lq, ElemType *elem)
  2. {
  3. QPoint tp;
  4. tp = lq->front->next;
  5. if(tp==NULL)
  6. {
  7. printf("队列为空\n");
  8. return -1;
  9. }
  10. *elem = tp->data;
  11. lq->front->next = tp->next;
  12. <span style="white-space:pre"> </span>if(lq->rear==tp)
  13. <span style="white-space:pre"> </span>lq->rear = lq->front;
  14. free(tp);
  15. return 0;
  16. }

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读

    相关 基本操作 数据结构

    队列(queue)也是线性表的一种特殊情况,其所有的插入均限定在表的一端进行,而所有的删除则限定在表的另一端进行。允许插入的一端称队尾(rear),允许删除的一端称队头(fro

    相关 数据结构系列-基本操作

    队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的端是队尾,允许删除的端是队头。 所以说队列是一个先进先出的线性表,相应的也有顺序存储和