列表的顺序表实现
2022/3/28 23:26:49
本文主要是介绍列表的顺序表实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
盼望着,盼望着
天气蛮好
列表
列表的顺序存储
姥姥写的空一个内存的队列,front指向队首前一位,rear指向队尾。
有意思的是打印时需要注意分类讨论:
- rear>front的情况,队列没有在内存中“腰斩”,正常打印即可。
- rear<front的情况,队列已经绕了一圈了,此时打印front到maxsize的部分,在从0打印到rear。
#include<stdio.h> #include<stdlib.h> #define maxsize 10 //队列只能存储maxsize-1个数据 typedef int position; //rear指向队列尾,刚刚插入的元素 //front指向第一个元素的前一位 //front指向的内存永不存放有效数据 当front等于rear时队列为空 typedef struct { int* data; position front, rear; }queue,*pqueue; pqueue createqueue() { pqueue Q = (pqueue)malloc(sizeof(queue)); Q->data = (int*)malloc(maxsize * sizeof(int)); Q->front = Q->rear = 0; return Q; } int isfull(pqueue Q) { return ((Q->rear + 1) % maxsize == Q->front); } int isempty(pqueue Q) { return (Q->front == Q->rear); } int addq(pqueue Q, int elem) { if (isfull(Q)) { printf("满了"); return 0; } else { Q->rear = (Q->rear + 1) % maxsize; Q->data[Q->rear] = elem; return 1; } } int deleteq(pqueue Q) { if (isempty(Q)) { printf("空的"); return 0; } else { Q->front = (Q->front + 1) % maxsize; return Q->data[Q->front]; } } void print(pqueue Q) { if (Q->rear > Q->front) { for (int i = Q->front + 1; i <= Q->rear; i++) { printf("%d ", Q->data[i]); if (i == Q->rear)printf("\n"); } } else { for (int i = Q->front + 1; i < maxsize; i++) { printf("%d ", Q->data[i]); } for (int i = 0; i <= Q->rear; i++) { printf("%d ", Q->data[i]); if (i == Q->rear)printf("\n"); } } } int main() { pqueue Q = createqueue(); for (int i = 0; i < maxsize-1; i++) { addq(Q, i); } print(Q); deleteq(Q); print(Q); deleteq(Q); print(Q); addq(Q, 9); print(Q); }
列表的链式存储
摆了摆了明天再写
这篇关于列表的顺序表实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16ShardingSphere 如何完美驾驭分布式事务与 XA 协议?
- 2024-11-16ShardingSphere如何轻松驾驭Seata柔性分布式事务?
- 2024-11-16Maven资料入门指南
- 2024-11-16Maven资料入门教程
- 2024-11-16MyBatis Plus资料:新手入门教程与实践指南
- 2024-11-16MyBatis-Plus资料入门教程:快速上手指南
- 2024-11-16Mybatis资料入门教程:新手必看指南
- 2024-11-16MyBatis资料详解:新手入门与初级实战指南
- 2024-11-16MyBatisPlus资料:初学者入门指南与实用教程
- 2024-11-16MybatisPlus资料详解:初学者入门指南