📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处
文章目录
https://blog.csdn.net/Edward_Asia/article/details/120876314
https://www.zhihu.com/question/315752464
前言:顺序表的优缺点
顺序表的特点:以物理位置相邻表示逻辑关系。
顺序表的优点:任一元素均可随机存取。
顺序表的缺点:进行插入和删除操作时,需移动大量的元素。其次, 存储空间不灵活,空间大小有限
由于顺序表存在以上的这些优缺点,才开始有替代它的数据结构出现:线性表。
线性表的链式表示和实现
链式存储结构:结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 线性表的链式表示又称为非顺序映像或链式映像。
每个节点由两个域组成:
1、数据域:存储元素数值数据;
2、指针域:存储直接后继结点的存储位置。
只要找到头指针,便能顺藤摸怪找到其他元素,这就是链表的结构特点。单链表是由头指针唯一确定,因此单链表可以用头指针的名字来命名。其次,单链表的尾部由于没有指向下一个元素了,因此其指针域为空NULL
与链式存储有关的术语
1、结点:数据元素的存储映像。由数据域和指针域两部分组成
2、链表:n个结点由指针链组成一个链表。
一、单链表
单链表的特点
单链表(Singly Linked List)是一种常见的数据结构,具有以下特点:
1、链式存储:单链表使用节点来存储数据,并通过节点之间的链接关系组织起来。每个节点都包含数据和一个指向下一个节点的指针(通常称为“next”指针)。
2、动态大小:单链表的大小可以根据需要动态地增长或缩小,因为它使用了动态内存分配。这使得在插入或删除节点时不需要移动其他节点,相比于数组,单链表更灵活。
3、顺序访问:由于单链表只能从头部开始顺序访问,无法直接访问中间或尾部的节点。要访问某个特定位置的节点,需要从头节点开始按照链接依次遍历到目标位置。
4、插入和删除效率较高:相对于数组,单链表在插入和删除节点的操作上具有较高的效率。在已知位置的情况下,插入和删除一个节点的时间复杂度为
O(1)。但是,要找到插入或删除的位置可能需要遍历整个链表,平均时间复杂度为 O(n)。
单链表的创建
typedef struct Node {
int data; // 节点中存储的数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建链表
Node* createLinkedList(int arr[], int size) {
if (size == 0) {
return NULL;
}
Node* head = (Node*)malloc(sizeof(Node));
head->data = arr[0];
head->next = NULL;
Node* tail = head;
for (int i = 1; i < size; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
tail->next = newNode;
tail = newNode;
}
return head;
}
在上述代码中,我们定义了一个名为 Node 的结构体类型,表示单链表的节点。
该结构体包含两个成员:data 和 next。
data 表示节点中存储的数据,可以是任意类型的数据。
next 是指向下一个节点的指针(也可以为空指针)。 通过将多个节点按照 next 指针链接起来,就形成了一个完整的单链表。
双向链表
双向链表的节点结构:有前驱和后继指针
Data:节点
Prev:节点的前驱指针
Next:节点的后继指针
二、队列
2.1 基础概念
概念: 队列(Queue)是仅在表尾进行插入操作,在表头进行删除操作的线性表。
表尾即an端,称为队尾;
表头即a端,称为队头。 它是一种先进先出( FIFO )的线性表。
入队与出队:插入元素称为入队;删除元素称为出队。
存储结构:链队或顺序队(常用循环顺序队)。链式队列就是使用链表的形式进行存储。
运算规则:只能在队首和队尾运算,且访问结点时依照先进先出(FIFO)的原则。所谓的“头删尾插”,也就是运算的时候,数据只能存尾部插入或是添加,在头部删除或是离开。
2.2 顺序队列的操作
队列大致上有如下的基本操作
1、构造队列 2、清除队列 3、求队列的长度 4、求队列的头元素、尾元素 5、删除队列的对头元素
如何实现顺序队列
队和的顺序表示——用一维数组base[MAXSIZE]
2.3 链式队列的操作
顺序队列的表示与实现
空队的标志:头指针等于尾指针
真溢出与假溢出