数据结构之单链表--初学

前言:

网络上的东西有好有坏,耽误了太多的时间了。身为大一狗,网课我都没上过几节课。就专业课的时候认真的听一听。今天给自己立个flag,好好的学习英语和数学还有专业课。收藏夹里面的文件都满了。还没有学习过。唉呀,好烦呀。前天刚说完互联网人要有终生学习的意识,怎么现在我又思想滑坡了呢。好在今天还是能肝出一篇文章。尽量两三天就写出一片我的心结。

单链表介绍:

顺序表看着就够了,为什么还要有单链表呢?有没有发现,顺序表在插入和删除的时候,特别麻烦,需要遍历。当然,在元素少的时候我们感觉不到时间,但是元素多的话,就要浪费很多的时间来了。于是,我们世界的伟人又创造了链表。今天我们就学一学单链表。明天的话,高数课我就挂着,我在高数课上看一会栈的视频,争取下午2点前写出来。哈哈哈,之前刚说的flag呢?好烦奥,说话跟放屁一样似的。
单链表的定义

typedef  struct LNode{

Elemtype date;/*数据域*/
struct LNode *next;}/*指针域*/
LNode,Linklist;

判断单链表是否为空/
我们这里的单链表是带有头结点的单链表。
我们东东脑子想一想,判断非空,就是要看第一个首元结点的是不是空的。思路有了,那么代码就很名确了。

int ListEmpty(LinkList L)
{ 
if(L->next =NULL)
return error;
else 
return ok;

初始化单链表/
首先生成新结点作为头结点,用L指向头结点。
将表头的头指针的指针域置空。

void IninList(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode))
L->=NULL;
}

销毁单链表
这里的销毁和顺序表不一样,顺序表直接free,然后L.elem=null.就这样的简单,可是到了,单链表就需要一个一个单一释放。一直到NULL。

nt LinkListDes(LinkList &L)
{
LinkList q;
while(L!=NULL)
{
p=L;
L=L-next;
free(p);
}/*这里我们在创建一个单链表,将单链表L每过一次循环,就赋值给了q.然后逐一释放*/

清空单链表
清空单链表需要保留头结点和头指针。

void LinkList_clear(LinkList &L)
{
Linklist q;
LinkList p;
p = L-next;
while(L->next!=NULL)
{
q = p->next;
 free(p);
 p = q;
 }/*我们这里要了两个中介,让p等于L的头结点,我们要想再释放下一个,这个时候q来了,q成为了p的next,再令p=q。这样一阴一阳完成循环。直接到null结束。当然,伪代码,写的不规范,应该malloc的,所以大家还是努力学习把。爬狗都差不多忘记了。*/

求单链表的表长
求表长,我们就从第一个头结点开始

int LinkList_Length(LinkList &L)
{
LinkList p;
int i =0;
while(p)
{i++;
p=p->next;
}
printf("%d",i);}
/*new一个新的p,可能会有人不解,为什么是i=0呢?爬狗给你们讲一讲,i=1;那么如果我们这个是空链表,岂不就是错了。所以我们让I=0;然后从零开始数,可能会有同学还是不了解,我们可以把自己想象成一个机器,在脑海里面循环一次就好了。*/


不写啦,没状态了。整个人都菜了。
老师前天布置的作业我还没有写呢。好生气鸭。明天再来写

早上续航,还有20分钟就要上数学网课。我趁着时间不注意,偷偷的写完她。

取第i个值
在单链表里面也会有取第i个值,然后用e返回。虽然看着简单,深知此事要躬行。

int GetElem_L(LinkList L,int i,ElemType &e)
{
L = L->next;int j=1;
while(L&&j<i)
{L=L->next;
j++;
}
if L = NULL;
return error;
else
e = L->data;
}


按值查找
根据这个值来找它位于第几个结点。

int LocateElem(LNode L,ElemType e)    
{ LinkList p;
p=L->next;j=1;
while(p->data!=e &&p)
{
j++;
p=p->next;
}
if(p!=NULL)
return j;
else 
return error;
}


插入算法
int InitList(LinkList &L,int i,ElemType e)
{
/通过循环我们找到第i-1个结点/
int j=0;
LinkList p;
while(p&&j<i-1)
{
j++;
p=p->next;
}
LinkList q;
q->data = e;
q->next = p->next;p->next = q;}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值