数据结构——队列(C语言)

03-02 阅读 0评论

需求:无

本篇文章将解决一下几个问题:

数据结构——队列(C语言),数据结构——队列(C语言),词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,操作,删除,第1张
(图片来源网络,侵删)
  1. 队列是什么?
  2. 如何实现一个队列?
  3. 什么场景下会用队列?

 队列的概念:

  • 队列:一种只允许一端进行插入数据操作,在另一端进行删除操作的特殊线性表。队列具有先进先出(FIFO)入队列:进行插入操作的一端称为队尾,出队列的一端叫做队头。

    数据结构——队列(C语言)

     队列的实现:

    •  队列也可以使用链表或者数组来实现。但是一般都是用链表来实现,如果用数组的话,出队列的时候,会移动数据,效率很低(O(N))。
    • 用链表实现,出队列时要记录好头节点的下一个节点。

      数据结构——队列(C语言)

      数据结构——队列(C语言)

      • 队列的判空:当元素个数为0,就是一个空队列,这时不允许出队列。

      • 队列元素的个数:当入队列的时候,size就+1,出队列时就-1,当我们需要元素个数的时候就不需要遍历,用O(1)的时间复杂度就可以完成队列的元素个数。

         队列的应用场景:

        •  其实在我们的生活中,到处都是队列的身影,像排队买票的时候,医院叫号的时候....
        • 还有就是想大麦app上抢演唱会的票等等,都有队列的身影。

          队列的源码:

          void QueueInit(Queue* pq)
          {
          	assert(pq);
          	pq->tail = pq->head = NULL;
          	pq->size = 0;
          }
          void QueueDestroy(Queue* pq)
          {
          	assert(pq);
          	QueueNode* cur = pq->head;
          	while (cur)
          	{
          		QueueNode* next = cur->next;
          		free(cur);
          		cur = next;
          	}
          }
          void QueuePush(Queue* pq, QueueDateType x)
          {
          	assert(pq);
          	QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));
          	if (newnode == NULL)
          	{
          		perror("malloc fail");
          		exit(-1);
          	}
          	newnode->next = NULL;
          	newnode->val = x;
          	if (pq->head == NULL)
          	{
          		pq->tail = pq->head = newnode;
          	}
          	else
          	{
          		pq->tail->next = newnode;
          		pq->tail = newnode;
          	}
          	pq->size++;
          }
          void QueuePop(Queue* pq)
          {
          	assert(pq);
          	assert(!QueueEmpty(pq));
          	if (pq->head->next == NULL)
          	{
          		free(pq->head);
          		pq->head = pq->tail = NULL;
          		pq->size--;
          	}
          	else
          	{
          		QueueNode* next = pq->head->next;
          		free(pq->head);
          		pq->head = next;
          		pq->size--;
          	}
          }
          QueueDateType QueueFront(Queue* pq)
          {
          	assert(pq);
          	assert(!QueueEmpty(pq));
          	return pq->head->val;
          }
          QueueDateType QueueBack(Queue* pq)
          {
          	assert(pq);
          	assert(!QueueEmpty(pq));
          	return pq->tail->val;
          }
          int QueueSize(Queue* pq)
          {
          	assert(pq);
          	return pq->size;
          }
          bool QueueEmpty(Queue* pq)
          {
          	assert(pq);
          	return pq->head == NULL;
          }
          void QueuePrint(Queue* pq)
          {
          	assert(pq);
          	while (pq->head)
          	{
          		printf("%d ", pq->head->val);
          		pq->head = pq->head->next;
          	}
          	printf("\n");
          }
          typedef int QueueDateType;
          typedef struct QueueNode
          {
          	struct QueueNode* next;
          	QueueDateType val;
          }QueueNode;
          typedef struct Queue
          {
          	QueueNode* head;
          	QueueNode* tail;
          	int size;
          }Queue;
          void QueueInit(Queue* pq);
          void QueueDestroy(Queue* pq);
          void QueuePush(Queue* pq,QueueDateType x);
          void QueuePop(Queue* pq);
          QueueDateType QueueFront(Queue* pq);
          QueueDateType QueueBack(Queue* pq);
          int QueueSize(Queue* pq);
          bool QueueEmpty(Queue* pq);
          void QueuePrint(Queue* pq);
          数据结构——队列(C语言),数据结构——队列(C语言),词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,操作,删除,第5张
          (图片来源网络,侵删)
          数据结构——队列(C语言),数据结构——队列(C语言),词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,操作,删除,第6张
          (图片来源网络,侵删)

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]