线性表

来源:互联网 发布:英雄皮肤淘宝店 编辑:程序博客网 时间: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)实现遍历操作—》实现查找操作—》实现插入+删除操作—》通过查找+插入+删除基本操作实现其他复杂操作

原创粉丝点击