c语言 list 使用数组来实现_C|用数组或链表来实现队列这种抽象数据类型

抽象数据类型允许用户在不了解数据类型在计算机中的表示方式的情况下操作数据类型。换句话说,就用户而言,他需要知道的只是可以对数据类型执行的操作。实现数据类型的人可以自由地更改其实现,而不会影响用户。

队列是一个线性列表,其中元素在一端添加,从另一端删除。熟悉的例子有在银行、超市、音乐会或体育赛事上排队。人们应该在后面排队从前面出去。我们希望一个队列数据结构对于模拟这些实际队列是有用的。在计算机内部也可以找到队列。可能有几个作业等待执行,它们被保留在队列中?

队列就是一种抽象数据类型。

队列的应用场景(保存暂时不用的数据或存储地址):I CPU分时系统;II 模拟打印机缓冲区;III 登录和退出人数记录;

队列可以用链表实现,也可以用数组实现:

1 用结构体来定义队列

typedef struct {int head, tail;int QA[MaxQ];} QType, *Queue;

2 队列初始化

Queue initQueue() {Queue qp = (Queue) malloc(sizeof(QType));qp -> head = qp -> tail = 0;return qp;}

3 用初始来定义一个队列变量

Queue Q = initQueue();

b84a2bc6030028e6a283af3789ed6e97.png

4 判断栈是否为空

int empty(Queue Q) {return (Q -> head == Q -> tail);}

5 入队(队尾)操作

void enqueue(Queue Q, int n) {if (Q -> tail == MaxQ - 1) Q -> tail = 0;else ++(Q -> tail);if (Q -> tail == Q -> head) {printf("Queue is full");exit(1);}Q -> QA[Q -> tail] = n;} //end enqueue

如做以下操作:

enqueue(Q,35);enqueue(Q,15);enqueue(Q,12);
9ae66b2d7135bcad9cd2a0a97b268b59.png

6 出队(队头)操作

int dequeue(Queue Q) {if (empty(Q)) {printf("Attempt to remove from an empty queue");exit(1);}if (Q -> head == MaxQ - 1) Q -> head = 0;else ++(Q -> head);return Q -> QA[Q -> head];} //end dequeue

如做如下操作:

dequeue(Q);enqueue(Q,23);
8f702fb26a26ce1045cf274322cee797.png

完整代码:

#include #include #define MaxQ 10typedef struct {int head, tail;int QA[MaxQ];} QType, *Queue;Queue initQueue() {Queue qp = (Queue) malloc(sizeof(QType));qp -> head = qp -> tail = 0;return qp;}int empty(Queue Q) {return (Q -> head == Q -> tail);}void enqueue(Queue Q, int n) {if (Q -> tail == MaxQ - 1) Q -> tail = 0;else ++(Q -> tail);if (Q -> tail == Q -> head) {printf("Queue is full");exit(1);}Q -> QA[Q -> tail] = n;}int dequeue(Queue Q) {if (empty(Q)) {printf("Attempt to remove from an empty queue");exit(1);}if (Q -> head == MaxQ - 1) Q -> head = 0;else ++(Q -> head);return Q -> QA[Q -> head];}int main() {int n;Queue Q = initQueue();enqueue(Q,35);enqueue(Q,15);enqueue(Q,12);dequeue(Q);enqueue(Q,23);printf("queue: ");while (!empty(Q))printf("%d 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值