前言:
网络上的东西有好有坏,耽误了太多的时间了。身为大一狗,网课我都没上过几节课。就专业课的时候认真的听一听。今天给自己立个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;}