在编程语言中怎样定义队列及其使用(C++)

2020-01-06 20:18:04王振洲


#define LDT char
//结点类型
typedef struct llnode{
  LDT data;
  struct llnode *next;
}LINKNODE;

//链队列结构
typedef struct{
  LINKNODE *front,*rear;
}LINKQUEUE;

链队列上的操作

(1)创建链队列

在QueueLinkControl.h写出方法声明


#include <stdio.h>
#include "QueueLinkCs.c"


/*
 创建链队
 */
LINKQUEUE * initLinkQueue(LINKQUEUE *LQ);

在QueueLinkControl.c中实现此方法


#include "QueueLinkControl.h"
#include <stdlib.h>
/*
 创建链队
 */
LINKQUEUE *initLinkQueue(LINKQUEUE *LQ){
  //设置队头指针
  LQ->front=(LINKNODE *)malloc(sizeof(LINKNODE));
  LQ->front->data='#';//设置队头指针,也是头结点的指针域
  LQ->front->next=NULL;
  //初始条件:队头指针和队尾指针一致
  LQ->rear=LQ->front;
  return LQ;
}

(2)插入

在QueueLinkControl.h写出方法声明


/*
 链队插入:队尾
 */
LINKQUEUE * inLinkQueue(LINKQUEUE *LQ,LDT x);

在QueueLinkControl.c中实现此方法

(3)删除

在QueueLinkControl.h写出方法声明


/*
 链队删除:队头
 */
LINKQUEUE *outLinkQueue(LINKQUEUE *LQ);

/*
 打印链表结点
 */
void printLinkQueue(LINKQUEUE *LQ);

在QueueLinkControl.c中实现此方法


#include "QueueLinkControl.h"
#include <stdlib.h>
LINKQUEUE *outLinkQueue(LINKQUEUE *LQ){
  if(LQ==NULL || LQ->rear==LQ->front){
    printf("LQ is empty!n");
    return LQ;
  }
  //1.获取首结点
  LINKNODE *frontNextNode;
  frontNextNode=LQ->front->next;

  //2.将首节点的next指针域的值存储头结点的next域

  LQ->front->next=frontNextNode->next;

  //3.如果队尾结点等于首节点的next指针域的值,那么表示是空栈,根据空链队列的结构,还需修改队尾指针,使指向头结点.
  if(LQ->rear==frontNextNode){
    LQ->rear=LQ->front;
  }
  //4.释放删除的结点
  free(frontNextNode);

  printf("out link queue success!n");
  return LQ;
}

/*
 打印链表结点
 */
void printLinkQueue(LINKQUEUE *Q){
  //实例化一个LQ,为了不改变原来链队Q
  LINKQUEUE *LQ;
  LQ=(LINKQUEUE *)malloc(sizeof(LINKQUEUE));
  LQ->front=Q->front;
  LQ->rear=Q->rear;
  printf("queue={");
  //1.判断不是空链表
  if(LQ!=NULL && LQ->rear!=LQ->front){
    int flag=0;

    do{
      //2.输出数据
      if(flag==0){
        printf("%c",LQ->front->data);
        flag=1;
      }else{
        printf(",%c",LQ->front->data);
      }
      //3.链头指针向后移动
      LQ->front=LQ->front->next;

    }while (LQ->front!=LQ->rear) ;

   printf(",%c",LQ->front->data);
  }

  printf("}n");
}