C语言实现队列

编程语言 专栏收录该内容
8 篇文章 0 订阅

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>

#define ERROR 0
#define OK 1
#define MAX_SIZE 3

typedef int Element;
//队列是一种进出受限的线性表
typedef struct Node
{
    int data;
    struct Node *next;
}LNode,*Queue;

int isEmpty(Queue q);
int isFull(Queue q);
//入队
int enq(Queue q,Element e){
    if(isFull(q)){
        printf("队列已满!\n");
        return 0;
    }
    //挂在队列最后
    while(q->next){
        q = q->next;
    }
    //创建新节点
    Queue newNode = (Queue)malloc(sizeof(LNode));
    if(!newNode){
        printf("内存已满!入队失败!\n");
        return 0;
    }
    newNode->data = e;
    q->next = newNode;
    return 1;
}
//出队
int deq(Queue q){
    //出队第一个元素
    if(isEmpty(q)){
        printf("出队失败,队列已空!\n");
    }else{
        //指向首结点
        Queue freeNode = q->next;
        //头指针越过首结点指向下个结点
        q->next = freeNode->next;
        //释放freeNode
        free(freeNode);
    }
}
//是否满
int isFull(Queue q){
    int i = 0;
    while(q){
        q = q->next;
        i++;
    }
    //假定带头结点
    if(i > MAX_SIZE){
        return 1;
    }
    return 0;
}
//是否空
int isEmpty(Queue q){
    return q->next == NULL ? 1 : 0;
}

void print(Queue q){
    while(q->next){
        q = q->next;
        printf("%d", q->data);
    }
    printf("\n");
}

int main(int argc, char const *argv[])
{
    //入队1
    Queue q = (Queue)malloc(sizeof(LNode));
    enq(q,1);
    print(q);
    enq(q,2);
    print(q);
    enq(q,3);
    print(q);
    enq(q,4);
    print(q);
    deq(q);
    print(q);
    deq(q);
    print(q);
    deq(q);
    print(q);
    deq(q);
    print(q);
    deq(q);
    print(q);
    return 0;
}

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值