1.线性表

主要考查知识点

1、线性表,

2、树和二叉树

3、图

4、排序算法

6、hash

6、查找算法

 

基本数据结构

 

线性表

按存储结构分类分为两类,顺序表以及链表

顺序表在内存中按顺序存储

链表是离散的,单独的一个个点,即物理上是离散的,但是逻辑上是一个整体

 

链表的类别:

 

单链表:单向的,有两个域,前面的叫数据域,后面的叫指针域,存放的是指针,用于指向另一个节点,即下一个结点的地址,最后一个指针域为空,即表示后面没有后继结点

循环链表:与单链表相似,但是最后一个的下一个结点是头结点,这样就构成了一个循环

双链表:即不只一个指针,有两个指针域,前后各一个,从两个不同方向将链表连接起来,这样就构成了双向链表

双链表的灵活性会大于单链表,但是开支会更多,因为有两个指针域

 

链表的操作

单链表的删除:将要删除的结点的前驱结点next域指向它的后继结点,并释放该结点

单链表的结点插入,将要插入位置新建一个结点,将该节点指向要插入位置的下一结点,并将其前驱结点指向该结点

 

双链表的结点删除

双链表的结点插入

顺序表与链表的比较:

顺序表与链表的比较

 

栈:

并非实际存在,先进后出

队列:先进先出

循环队列会形成一个环,每进入一个元素后,堆头指针不动,队尾指针向后移一位,当head=tail值队列可能为空或可能为满

解决方法:牺牲队列的最后一个空间不用来存数据,当尾指针指向最后一个空间时即队满,tail+1=head队满

mod运算是求余

做队列之类的题的时候画一个图再进行解答

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于数组实现的线性表的基本操作及应用的 C++ 代码示例: ```c++ #include <iostream> #define MAXSIZE 100 // 线性表最大长度 using namespace std; typedef struct { int data[MAXSIZE]; // 数组存储元素,从下标 1 开始存储 int length; // 线性表当前长度 } SqList; // 初始化线性表 void InitList(SqList &L) { L.length = 0; } // 插入元素 bool InsertList(SqList &L, int i, int x) { if (i < 1 || i > L.length + 1 || L.length >= MAXSIZE) { return false; } for (int j = L.length; j >= i; j--) { L.data[j + 1] = L.data[j]; } L.data[i] = x; L.length++; return true; } // 删除元素 bool DeleteList(SqList &L, int i) { if (i < 1 || i > L.length) { return false; } for (int j = i; j < L.length; j++) { L.data[j] = L.data[j + 1]; } L.length--; return true; } // 查找元素 int SearchList(SqList L, int x) { for (int i = 1; i <= L.length; i++) { if (L.data[i] == x) { return i; } } return -1; } // 输出线性表 void PrintList(SqList L) { for (int i = 1; i <= L.length; i++) { cout << L.data[i] << " "; } cout << endl; } int main() { SqList L; InitList(L); InsertList(L, 1, 1); InsertList(L, 2, 2); InsertList(L, 3, 3); PrintList(L); DeleteList(L, 2); PrintList(L); int pos = SearchList(L, 3); cout << "3 is at position " << pos << endl; return 0; } ``` 以上代码实现了线性表的创建、插入、删除、查找等基本操作,并提供了一个输出线性表的函数。在 main 函数中,首先创建了线性表 L,然后插入了三个元素,输出线性表,接着删除了第二个元素,再次输出线性表,最后查找元素 3 在线性表中的位置,并输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值