线性表
来源:互联网 发布:英雄皮肤淘宝店 编辑:程序博客网 时间:2024/06/05 19:15
一、顺序表
1.结构体
typedef struct { int data[maxSize];//此处采用了静态存储的方法。 int last; //last表示当前表中最后一个元素的位置。}SeqList;
2.操作
(1)查找 (第i个位置的元素直接使用数组下标即可)
for (int i = 0;i <= last;i++) { if (data[i] == x) { return i ; }
(2)插入 (第i个位置插入元素x,反向遍历,将第i个位置及其后面元素往后移一个位置)
for (int j = last;j > i;j--) { data[j + 1] = data[j];}data[i]=x;
(3)删除(删除第i个位置上的元素,正向遍历,将第i个位置后面的元素往前移一个位置)
for (int j = i;j < last;j++) { data[j] = data[j+1];}
二、单链表
1.结构体(带附件头结点)
typedef struct List{ int data; //存放数据 struct List* link; //存放下一个结点的地址}List;List* first; //链表头指针
2.操作
(1)查找,返回元素x的地址
List * current =first->link;while(current!=nullptr){ if(current->data==x){ break; } else{ current=current->link; }}return current;
(2)查找第i个元素,返回第i个元素地址
List * current=first;int k=0;while(current!=nullptr && k<i){ current=current->link; k++;}return current;
(3)插入在第i个元素之后(通过查找操作可获得第i-1个元素地址current)
List * newNode=new List;newNode->data=x;newNode->link=current->link;current->link=newNode;
(4)删除第i个元素(通过查找操作可获得第i-1个元素地址current)
List * del=current->link;current->link=del->link;delete del;
总结
(1)顺序表的基本结构:数组+最后一个元素位置;单链表的基本结构:数据+下一个结点地址,还包括一个头指针。
(2)线性表的插入+删除操作是建立在查找操作的基础上的,应先实现查找操作。查找操作分为按数据值查找+按位置查找。
(3)插入+删除操作主要分3种情况:表头插入+表中插入+表尾插入
(4)链表的几种变形:带表头+循环链表+双向链表
(5)带表头的链表主要简化了各项操作的逻辑结构,增加了一个空结点来换取代码逻辑上的简化。一般都使用带表头的链表。
(6)循环链表,将最后一个结点内的指针指向表头。优点:只要知道表中任意一个结点的地址,就能遍历表中其他任一个结点。
(7)双向链表,增加了指向前驱的指针,从当前结点能方便找到前一个结点和后一个结点。
(8)带尾指针的链表,更适合做链表尾部操作。
(9)链表生成方法:前插法+后插法。使用后插法时,需要一个额外的指针指向链表最后一个元素。
(9)链表内基本遍历操作
List * current;for(current=first->link;current!=nullptr;current=current->link){ //相关操作}
(10)实现遍历操作—》实现查找操作—》实现插入+删除操作—》通过查找+插入+删除基本操作实现其他复杂操作
- 线性表--线性存储
- 线性表 线性结构
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 聚类
- 修改div内A标签的href值
- POJ 1475 Pushing Boxes
- android监听返回按键
- Codeforces Round #442 (Div. 2)-广搜&剪枝&技巧&好题-D. Olya and Energy Drinks
- 线性表
- C# 利用函数反射、XML序列化/反序列化保存函数执行与输入参数列表
- 淘淘商城01---毕业两年,收货与展望
- 构造与析构
- 编译原理题
- linux篇之安装MySQL及远程连接
- 关于PHP获取服务器地址的方法
- Android 横竖屏切换
- 点击头像 侧滑菜单出现 仿QQ界面