链队列基本操作实现(c语言)

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct
{
    ElemType data;
    struct node*next;
} linkQNode;
typedef struct qnode
{
    linkQNode* rear;
    linkQNode* front;
}*linkQueue;

//链队列初始化
linkQueue initLinkQueue()
{
    linkQueue q=(linkQueue)malloc(sizeof(struct qnode));
    q->front=(linkQNode*)malloc(sizeof(linkQNode));

    q->rear=q->front;
    q->front->next=NULL;
    printf("链队列初始化成功!\n");
    return q;

}
//入队列
int enQueue(linkQueue q,ElemType e)
{
    linkQNode *p=(linkQNode*)malloc(sizeof(linkQNode));
    if(p)
    {
        p->data=e;
        p->next=NULL;
        q->rear->next=p;
        q->rear=p;
        return 1;
    }
    return 0;
}
//出队列
int deQueue(linkQueue q,ElemType *e)
{
    linkQNode* p;
    if(q->rear!=q->front)
    {

        p=q->front->next;
        q->front->next=p->next;

        if(q->rear==p)//如果队列只有一个元素,变成空队列
        {
              q->rear=q->front;
        }
        *e=p->data;
        return 1;
    }
    return 0;

}
//获取队头元素
int getQueueHead(linkQueue q)
{

      if(q->rear!=q->front)
      {
             linkQNode *p=q->front->next;
            return p->data;
      }
      return 0;
}
//判断队空
int isEmpty(linkQueue q)
{
      if(q->rear==q->front)
      {
            return 1;
      }
      return 0;
}
//销毁队列
void destoryQueue(linkQueue q)
{
      linkQNode *p;

      while(!isEmpty(q))
      {
            p=(linkQNode*)malloc(sizeof(linkQNode));
            p=q->front->next;
            free(p);

      }
      printf("队列已经销毁!\n");

}
int main()
{
    linkQueue q=initLinkQueue();
    if(isEmpty(q))
    {
          printf("当前队列为空!\n");
    }
    int n,i,a[100],d,head;
    printf("请输入一个数字n:\n");
    scanf("%d",&n);
    printf("请输入%d个元素\n",n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
        enQueue(q,a[i]);
        head=getQueueHead(q);
        printf("当前队列队头元素为%d\n",head);

    }
    printf("打印出队序列:\n");

    while(deQueue(q,&d))
    {
        printf("%d ",d);
    }
    if(isEmpty(q))
    {
          printf("\n当前队列为空!\n");
    }
    destoryQueue(q);




    return 0;
}

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链队列基本操作包括:初始化、入队、出队、获取队头元素、判断队列是否为空、获取队列长度。 下面是链队列基本操作的代码实现: ```c #include <stdio.h> #include <stdlib.h> // 链队列结点 typedef struct QNode { int data; struct QNode *next; } QNode; // 队列结构体 typedef struct { QNode *front; // 队头指针 QNode *rear; // 队尾指针 } Queue; // 初始化队列 void initQueue(Queue *q) { q->front = q->rear = (QNode *) malloc(sizeof(QNode)); if (q->front == NULL) { printf("初始化队列失败,内存分配失败!\n"); exit(-1); } q->front->next = NULL; } // 入队 void enQueue(Queue *q, int data) { QNode *p = (QNode *) malloc(sizeof(QNode)); if (p == NULL) { printf("入队失败,内存分配失败!\n"); exit(-1); } p->data = data; p->next = NULL; q->rear->next = p; q->rear = p; } // 出队 void deQueue(Queue *q) { if (q->front == q->rear) { printf("出队失败,队列已空!\n"); exit(-1); } QNode *p = q->front->next; q->front->next = p->next; if (q->rear == p) q->rear = q->front; free(p); } // 获取队头元素 int getFront(Queue *q) { if (q->front == q->rear) { printf("获取队头元素失败,队列已空!\n"); exit(-1); } QNode *p = q->front->next; return p->data; } // 判断队列是否为空 int isEmpty(Queue *q) { return q->front == q->rear; } // 获取队列长度 int getLength(Queue *q) { int len = 0; QNode *p = q->front->next; while (p != NULL) { len++; p = p->next; } return len; } // 打印队列中的元素 void printQueue(Queue *q) { QNode *p = q->front->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { Queue q; initQueue(&q); // 入队 enQueue(&q, 1); enQueue(&q, 2); enQueue(&q, 3); printf("队列中的元素为:"); printQueue(&q); // 出队 deQueue(&q); printf("出队后队列中的元素为:"); printQueue(&q); // 获取队头元素 printf("队头元素为:%d\n", getFront(&q)); // 判断队列是否为空 printf("队列是否为空:%d\n", isEmpty(&q)); // 获取队列长度 printf("队列长度为:%d\n", getLength(&q)); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值