数据结构之队列、栈和链表(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_32350131/article/details/100589951

前言

最近在学数据结构和算法方面的一些东西,毕竟算法才是编程的灵魂,在外面实习了一年,一直也是觉得自己的技术还十分有限,大概我就是那种没怎么打基础就开始撸项目的野生程序员吧,因为基础差所以经常在各种小问题上被难倒,回头来看看其实这都是大家踩过的坑,归根到底还是自己急于求成,所以就开始学一些基础,也为了以后回到学校继续学业做一些铺垫。此文章中代码参考了一本浅显入门的算法书 《啊哈,算法》

1 队列

1.1 什么是队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。(摘自百度百科)

通俗来讲,队列就像我们排队,很多时候我们都会遇到排队的场景 (比如买票,食堂打饭,安检,买奶茶啥的),在这种场景下,队伍最前端的我们可以称之为队首,队伍最后端的可以称之为队尾,当队首办理完业务 (买到了票,食堂阿姨给打了整整一勺肉啥的) 就会从队伍中离开,这个过程我们称为出队,当然队列外部的数据想要进入队列,就必须从排在队尾之后 (理想状态下厚颜无耻的插队狗这种生物是不存在的) 成为新的队尾,这个过程我们可以成为入队。因此我们称这种模式为先进先出(First In First Out)
在这里插入图片描述

1.2 队列的组成

队列的组成有三个元素,即队首、队尾以及数据数组
下面是一个队列的结构体示例

struct quene{
    /*--这是一个队列的结构体,包含数据数组,队首和队尾--*/
    int data[100];
    int head;
    int tail
};

1.3 如何实现一个队列

以下是示例代码,完成了数组的初始化,入队,出队的基础操作

#include<stdio.h>
#include<stdlib.h>

struct quene{
    /*--这是一个队列的结构体,包含数据数组,队首和队尾--*/
    int data[100];
    int head;
    int tail
};

int main(){
    struct quene q;
    int i;
    /*--初始化队列--*/
    q.head = 1;
    q.tail = 1;
    for(i = 1;i <= 9;i++){
    /*--队列中插入9个数--*/
	scanf("%d",&q.data[q.tail]);
	q.tail++;
    }
    while(q.head < q.tail){
	/*--打印队首并将队首出队--*/
	printf("%d\n",q.data[q.head]);
	q.head++;
	
	q.data[q.tail] = q.data[q.head];
	q.tail++;
	q.head++;
    }
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32350131/article/details/100589951