数据结构简单队列学习(最简单)

数据结构简单队列学习(c语言)


  • 实现效果

在这里插入图片描述


  • 效果说明
    创建并加入元素后
    在这里插入图片描述
    删除元素后
    在这里插入图片描述

  • 代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

//Queue struct
typedef struct
{
    long unsigned head;
    long unsigned tail;
    int *queue;
    size_t arr_len;
    size_t que_len;
} Queue;

//Create an int array as Queue.Initial.
void NewCommonQueue(Queue *q, size_t QueueLen);
//Add a element for Queue.
void addElement(Queue *q, int elem);
//Delete a element of Queue.
int popElement(Queue *q);
//Show Queue.
void showQueue(Queue *q);




int main(void)
{
    Queue q;
    NewCommonQueue(&q, 5);

    addElement(&q, 2);
    addElement(&q, 3);
    addElement(&q, 4);
    addElement(&q, 5);
    addElement(&q, 6);

    showQueue(&q);
    puts("");

    int A = popElement(&q);
    int B = popElement(&q);

    showQueue(&q);
    puts("");

    printf("A = %d\n", A);
    printf("B = %d\n", B);
        

    free(q.queue);
    return 0;
}

int popElement(Queue *q)
{
    if(q == NULL)
    {
        fputs("NULL point exception\n", stderr);
        exit(0);
    }

    //Exit program if Queue is empty.
    if(q->head == q->tail)
    {
        fputs("Queue empty\n", stderr);
        exit(0);
    }
   
    int ret = q->queue[q->head + 1];
    q->head += 1;

    //Set Queue element's quality.
    q->que_len = q->tail - q->head; 

    return ret;
}

void showQueue(Queue *q)
{
    printf("head = %lu\n", q->head);
    printf("tail = %lu\n", q->tail);

    int *arr = &q->queue[q->head] + 1;
    size_t i;
    printf("{ ");
    for(i = 0; i < q->que_len; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("}");
    puts("");
    return;
}

void addElement(Queue *q, int elem)
{
    if(q == NULL)
    {
        fputs("Null point exception\n", stderr);
        exit(0);
    }
    
    q->tail += 1;

    //Program exit if tail of Queue greater than array length.
    if(q->tail > q->arr_len - 1)
    {
        fputs("Queue tail err!\n", stderr);
        exit(0);
    }

    q->queue[q->tail] = elem;

    //Set Queue element's quality.
    q->que_len = q->tail - q->head;

    return;

}

void NewCommonQueue(Queue *q, size_t QueueLen)
{
    if(q == NULL)
    {
        fputs("Null point exception\n", stderr);
        exit(0);
    }

    int *newArray = (int *)malloc(sizeof(int) * (QueueLen + 1));

    //Program exit if malloc failure.
    if(newArray == NULL)
    {
        fputs("malloc error!!!\n", stderr);
        exit(0);
    }

    q->arr_len = QueueLen + 1;
    q->head = 0;
    q->tail = 0;
    q->queue = newArray;

    //Set Queue element's quality.
    q->que_len = q->tail - q->head;
    
    return;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值