单链表有关操作

单链表有关操作

单链表有关操作

不带头结点的单链表
单链表的初始化,就是建立个链表,根据头指针来一点点增加

#include<stdio.h>
typedef struct LNode{
int data;                //值域
struct LNode *next;      //指针域
}LNode, *LinkList;


bool InitList (LinkList &L){
    L=NULL;            //L置为空,未开辟空间没有结点 ,,,即没有头结点
    return true;
}


int main(){
    LinkList L;   //这是指针,相当于LNode *L;
    InitList(L);

    return 0;
}

带头结点的单链表初始化

#include<stdio.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;


bool InitList (LinkList &L){
    L=(LNode*)malloc(sizeof(LNode));    //建立个空间
    if(L=NULL){          //如果没空间了,,返回false;
        return false;
    }
    L->next=null;       //让这个空间next指向null;
    return true;
}


int main(){
    LinkList L;
    InitList(L);

    return 0;
}

视图
在这里插入图片描述
在这里插入图片描述

单链表按位序插入(带头结点)
在这里插入图片描述

bool ListInsert(LinkList &L,int i,int e){   //在链表中的第i个位置插入元素e
	if(i<1){
	return false;
	}
    LNode *p=L;   //L指向头结点,头结点是第0个结点(不存数据)
    int j=0;      //当前p指向的是第几个结点  
    while(p!=NULL &&j<i-1){   //找到第i-1个结点将其插入其后       
        j++
    }
    
    LNode *s=(LNode*)malloc(sizeof(LNode));  //开辟个空间s 插入链表中
    s->data=e;
    s->next=p->next;
    p->next==s;
    
    return true;
}

在这里插入图片描述

不带头结点的按位序插入

bool ListInsert(LinkList &L,int i,int e){
    if(i==1){        //i=1时单独处理
        LNode *s=(LNode*)malloc(sizeof(LNode));
        s->data=e;
        s->next=L;
        L=s;
        return true;
    }
    LNode *p;
    int j=1;   //当前p指向的是第几个结点
    p=L;
    while(p!=NULL &&j<i-1){
        p=p->next;
        j++
    }
    
    LNode *s=(LNode*)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next==s;
    
    return true;
}

在这里插入图片描述

指定结点的后插操作

bool InsertNextNode(LNode *p,int e){
if(p==NULL)
    return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    if(s==NULL)
        return false;//内存分配失败
    
    s->data=e; 
    s->next=p->next;
    p->next=s;      //结点s连接到p之后
    return true;
}

在这里插入图片描述

指定结点的前插操作

bool InsertNextNode(LNode *p,int e){
if(p==NULL)
    return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    if(s==NULL)
        return false;//内存分配失败
    
   s->next=p->next;   //先按原先插入p后面,然后将s结点值等于p的值,p的值未e
   p->next=s;
   s->data=p->data;
   p->data=e;
    return true;
}

在这里插入图片描述

按位序删除(带头结点

bool ListDelete(LinkList &L,int i,int e){
    if(i<1){
        return false;
    }
    LNode *p;  //指针p指向当前扫描到的结点
    int j=0;  //当前p指向的是第几个结点
    p=L;       //L指向头结点,头结点是第0个结点(不存数据)
    while(p!=NULL &&j<i-1){  //循环找到第i-1个结点
        p=p->next;
        j++
    }
    if(p==NULL)
        return false;
    //----关键代码
    LNode *q=p->next;
    e=q->data;
    p->next=q->next;
    free(q);
    return true;
}

删除指定的结点
在这里插入图片描述
在这里插入图片描述

单链表的按位查找
在这里插入图片描述

单链表的按值查找
在这里插入图片描述

求表的长度
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值