Bootstrap

【数据结构不挂科】最全数据结构资料——线性表_数据结构不挂科资源(5)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

return OK;
}

7.读取顺序表所有元素

/打印线性表中的所有元素/
void OutPut(SqList L){
printf(“当前顺序表的长度:%d\n”, L.length);
for(int i = 0; i < L.length; i++){
printf(“%d “,L.elem[i]);
}
printf(”\n”);
}

二、线性表的链式表示

1.链表的定义

链表 (Linked List) :用链式存储的线性表,即用一组任意的存储单元存储线性表的各个数据元素,相互间的逻辑关系(前趋或后继)通过附加指针表示;所有结点通过指针域链接在一起,构成一个链表。

  • 元素之间的逻辑关系通过附加指针表示;
  • 结点可以连续,可以不连续;
  • 结点的逻辑顺序与物理顺序可以不一致。
2.单链表

单链表(Singly Linked List):每个结点有两部分信息:数据域,存放结点的值(内容);指针域(亦称链域),存放结点后继的地址(或位置)。由于每个结点只有一个链域,故得名。

在这里插入图片描述

  • 空指针:不指向任何结点
  • 头指针:单链表第一个结点的地址

在这里插入图片描述

3.单链表的存储结构

typedef int ElemType ; //结点数据类型,假设为int
typedef struct LNode {
ElemType data; // 数据域
struct LNode *next; // 指针域
} LNode, *LinkList;
LinkList head , p ;

4.单链表的插入

/**

  • 单链表插入操作
  • 初始条件:线性表L已存在
  • 操作结果:在L中第pos个位置之前插入新的数据元素e,L的长度增加1
    */
    Status ListInsert(LinkList *L, ElemType elem, int pos){
    if(pos<1 || pos > (*L)->lenght+1){
    return ERROR;
    }
    //寻找第pos个结点
    Node *p = (*L)->next; //头结点
    for(int i=1; i<pos; i++){
    p = p->next;
    }
    //生成一个新结点
    Node *q = (Node *) malloc(sizeof(Node));
    q->data = elem;
    q->next = p->next; //将p的后继赋值给q的后继
    p->next = q; //将q赋值给p的后继
    (*L)->lenght += 1; //链表长度加1
    return OK;
    }
5.单链表的删除

int delete(LinkList head,int i)
{ LinkList p,q;
q= LocateElem_L(head,i−1); //找待删点的直接前趋
if(qNULL || q−>nextNULL)
//即i<1或i>n时
{cout<<”非法删除位置!\n”;return 0;}
p=q−>next; //保存待删点地址
q−>next=p−>next; //修改前趋的后继指针
delete p; //释放结点
return 1; //删除成功
}

6.建表(头插法)

LinkList creat() //头插法建表,有头结点
{ LinkList head;
LinkList s;
char ch;
head=new Lnode; //生成头结点
while(cin>>ch,ch!=’$’) //输入并检测结束
{ s=new Lnode; //生成新结点
s−>data=ch; //装入数据
s−>next=head−>next;
head−>next=s; //插到头结点后
}
return head;
}

7.建表(尾插法)

LinkList creat() //尾插法建表,有头结点
{ LinkList head,rear,s;
char ch;
head=new Lnode; //生成头结点
rear=head; //尾指针初值
while(cin>>ch,ch!=’$’) //读入并检测结束
{ s=new Lnode; //生成新结点
s−>data=ch;
rear−>next=s; //新结点插入表尾
rear=s; //修改尾指针
}
rear−>next=NULL; //尾结点的后继为空
return head;
}

8.初始化

LinkList initlist()
{ LinkList head;
head=new Lnode;
head−>next=NULL;
return head;
}

9.单链表长度

int ListLength_L(LinkList L)
{ int j;
LinkList p;
j=0;
p=L->next; //从首结点开始
while(p!=NULL) //逐点检测、计数
{ j++;
p=p->next;
}
return j;
}

10.按值查找

LinkList LocateElem1_L(LinkList L,ElemType x)
{ LinkList p;
p=head−>next; //从首结点开始搜索
while(p!=NULL)
{ if(p−>data==x) break;
p=p−>next; //到下一个点
}
return p;
}

int LocateElem2_L(LinkList head, ElemType x)
{ int j;
LinkList p;
j=0; //计数器
p=head−>next; //从首结点开始扫描
while(p!=NULL) {
j++;
if(p−>data==x) break; //找到,退出
p=p−>next; //没找到,继续
}
if(p!=NULL) return j; //找到x
else return −1; //没有x,查找失败
}

11.清空单链表

Status Clear(LinkList *L){
Node *p = (*L)->next->next, *q;
while(p != NULL){
q = p;
p = p->next;
free(q);
}
(*L)->next->next = NULL;
(*L)->lenght = 0;
return OK;
}

12.销毁单链表

Status Destory(LinkList *L){
Node *p = (*L)->next, *q;
while(p != NULL){
q = p;
p = p->next;
free(q);
}
free((*L));
(*L) = NULL;
return OK;
}

如果你喜欢本博文,可以点点关注,以后会不断更新哦
在这里插入图片描述

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

V-1715501606795)]
[外链图片转存中…(img-FHqDJXNZ-1715501606796)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

;