单链表表的定义,初始化,查询,增加删除伪代码

本文详细介绍了使用C语言实现的单链表,包括带头节点的链表初始化、按位置插入和删除元素、查找元素以及计算链表长度的方法。
摘要由CSDN通过智能技术生成

这是一个单链表的实现,单链表是一种常见的数据结构,它由一系列的节点组成,每个节点包含两个部分,一个是数据域,另一个是指向下一个节点的指针。单链表的优点是插入和删除操作比较方便,但是查找操作比较耗时。下面是这个程序的一些函数的解释:

  1. InitList:初始化单链表,带头节点。头节点不存储数据,只是为了方便操作而设置的。

  2. InitList2:初始化单链表,不带头节点。

  3. ListInsert:按位插入元素,头节点。i表示插入的位置,c表示插入的元素值。

  4. ListDelete:按位删除元素,头节点。i表示删除的位置,c表示删除的元素值。

  5. GetElem:按位查找元素。i表示查找的位置。

  6. LocateElem:按值查找元素。c表示查找的元素值。

  7. Length:求单链表的长度。

这里需要注意的是,这个程序中的单链表是带头节点的,头节点不存储数据,只是为了方便操作而设置的。如果要实现不带头节点的单链表,需要对代码进行相应的修改。

#include <iostream>
typedef struct LNode{//定义单链表结点类型
    int data;//每个结点存放一个数据元素
    struct LNode *next;//指针指向下一个结点
}LNode,*LinkList;
//LinkList强调这是一个单链表
//LNode强调这是一个结点

//查找找i,插入删除找i-1
//查找要返回值(指针类型),所以定义的函数位LNode *......






//初始化,带头节点
bool InitList(LinkList &L){
    L=(LNode *) malloc(sizeof (LNode));
        if (L==NULL){//内存不足
        return false;
        }
    L->next=NULL;
    return true;

}



//不带头节点初始化
bool InitList2(LinkList &L){
    L=NULL;
};



//按位插入,头节点
bool ListInsert(LinkList &L,int i,int c){
    if(i<1){
        return false;
    }
    LNode *p;//p 指向当前扫描到的结点
    int j=0;//位数 当前指向第几个结点
    p=L;//L指向头节点(不存数据),从头扫尾
    while (p!=NULL && j<i-1){
        p=p->next;
        j++;
    }
    LNode *s=(LNode*) malloc(sizeof(LNode));
        s->data=c;
        s->next=p->next;
        p->next=s;
    return true;
}




//按位删除,头节点
bool ListDelete(LinkList &L,int i,int &c){
    if(i<1){
        return false;
    }
    LNode *p;
    int j=0;
    p=L;
    while (p!=NULL&&j<i-1){
        p=p->next;
        j++;
    }
    if(p==NULL){//i值不合法
        return false;
    }
    if(p->next==NULL){//到头了,后面没有元素了
        return false;
    }
    LNode *q=p->next;//令q结点指向删除结点
    c=q->data;//返回删除的元素值
    p->next=q->next;
    free(q);

}



//按位查找
LNode *GetElem(LinkList L,int i){
    if(i<0){
        return NULL;
    }
    LNode *p;//p 指向当前扫描到的结点
    int j=0;//位数 当前指向第几个结点
    p=L;//L指向头节点(不存数据),从头扫尾
    while (p!=NULL&&j<i){//找到第i个结点
        p=p->next;
        p++;
    }
    return p;
}



//按值查找
LNode * LocateElem(LinkList L,int c){
    LNode *p=L->next;//L为头节点第0位不存数据,这里从第一个结点开始查找数据域为c的结点
    while (p!=NULL&&p->data!=c){
        p=p->next;

    }
    return p;
}





//求表长
int Length(LinkList L){
    int len=0;//统计表长
    LNode *p=L;//从头开始
    while (p->next!=NULL){
        len++;
    }
    return len;


}





int main() {
    LinkList L;//声明一个指向单链表的指针
    InitList(L);
    InitList2(L);
    int c=-1;//设置初始值用来接受返回值
    ListDelete(L,4,c);
    GetElem(L,5);
    LocateElem(L,4);
    Length(L);
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值