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

链队列基本操作实现

队列

#链队的定义及其基本操作
#1、队列的定义
#队列,简称队,它是一种操作受限的线性表,其限制在表的一端进行插入,另一端进行删除。可进行插入的一端称为队尾(rear),可进行删除的一端称为队头#(front)。向队中插入元素叫入队,新元素进入之后就称为新的队尾元素。从队中删除元素叫出队,元素出队后,其后继结点元素就称为新的队头元素。
#2、队列的特点
#队的特点就是先进先出(栈为先进后出)。打个比方,队列就是在食堂吃饭的时候排队,先到的人先拿到饭,后到的人后拿到。
#3、队列的存储结构
#队列按存储结构可分为链队和顺序队两种。
#代码:
#include<stdio.h>
#include<stdlib.h>

typedef int QueueElemType;

typedef struct Node
{
    QueueElemType data;
    struct Node *next;
}LQNode;

typedef struct {
LQNode *front;
LQNode *near;
}LinkQueue;

void EnterQueue(LinkQueue *Q,int x)//入队
{
    LQNode *NewNode;
    NewNode=(LQNode*)malloc(sizeof(LQNode));
    if(NewNode!=NULL)
    {
        NewNode->data=x;
        NewNode->next=NULL;
        Q->near->next=NewNode;
        Q->near=NewNode;
    }
}

void DeleteQueue(LinkQueue *Q,int *x)//出队,并用x返回
{
    LQNode *p;
    if(Q->near==Q->front)
        return;
    p=Q->front->next;
    Q->front->next=p->next;
    if(Q->near=p)  //若只有一个元素
    {
        Q->front=Q->near;
    }
    *x=p->data;
    free(p);
    return ;
}

void InitQueue(LinkQueue *Q)//队列初始化
{
     Q->front=(LQNode*)malloc(sizeof(LQNode));
printf("d");
    Q->near=Q->front;
    Q->front->next=NULL;
}
int main()
{
    LinkQueue *Q;              //队列初始化

   InitQueue(Q);

    EnterQueue(Q,1);

     EnterQueue(Q,2);
      EnterQueue(Q,3);
       EnterQueue(Q,4);
       int x;
       DeleteQueue(Q,&x);
       printf("%d",x);
       return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

mcl19909949541

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值