当前位置: 首页 > article >正文

单链表总结

单链表的定义:

typedef struct LNode {
     ElemType data;
     struct LNode  *next;
}Lnode,*LinkList;

初始化单链表:

Status InitList_L (LinkList &L)
{
     L = (LinkList)malloc(sizeof(LNode));
     if (!L) exit(OVERFLOW);
     L->next = null;
     Return OK;
}

查找元素:

Status Getelem(Linklist &L,int i,Elemtype &e)
{
    p=L-next;//让p指向第一个结点
    int j=1;
    while(p!=NULL&&j>i)
{
    p=p->next;
    j++;
}
    if (!p||j>i)return ERROR; //第i个元素不存在      
    e=p->data;
    return OK;
}

按值查找:

Status LocateNode_L(LinkList L,Elemtype key,LNode &e)
 {
    p=L–>next;
    while( p && p–>data!=key)
         p=p–>next;
    if(!p) return ERROR;
    e=*p;
    return OK;
 }   

 插入操作算法:

Status ListInsert_L(LinkList &L, int i, ElemType e){
 //在带头结点的线性链表L中第i元素结点之前插入元素e
    p=L; j=0
    while (p&&j<i-1)
    {p=p->next; ++j;}//寻找第i-1个元素结点
    if(!p||j>i-1)
    return ERROR; // i小于1  则 j>i-1      
    s=(LinkList)malloc(sizeof(LNode)); //分配新结点
    s->data=e;
    s->next=p->next; 
    p->next=s;   //插入新结点
    return OK;
}

删除操作算法:

Status ListDelete_L(LinkList &L, int i, ElemType &e){
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
       p=L; j=0;
       while (p->next&&j<i-1){  //寻找第i-1个结点
             p=p->next; ++j;
       }
       if(!p->next)||j>i-1)return ERROR; //  表中无第i个结点(i不合法)                                                           
       q=p->next;p->next=q->next;   //删除结点
       e =q->data; free(q);  //  回收(释放)结点空间
       return OK;
}//

头插法建立单链表

void CreateList_L(LinkList &1, int n) {
     //逆序输入n个元素的值,建立带表头结点的线性链表
     L=(LinkList)malloc(sizeof (LNode));//建立头结点
     L->next=NULL; //先建立一个带头结点的单链表
     for (i=n; i>0;--i){
     p=(LinkList)malloc(sizeof(LNode));//生成新结点
     scanf(&p->data);//输入元素值
     p->next=L->next;L->next=p; //插入到表头/
      }
}

头插法建立单链表:

void CreateList_L(LinkList &L, int n) {
     //输入n个元素的值,建立带表头结点的线性链表
     L=(LinkList)malloc(sizeof (LNode));
     L->next=NULL; //先建立一个带头结点的单链表
     r=L;
     for (i=1; i<=n;i++){
     p=(LinkList)malloc(sizeof(LNode));//生成新结点
     scanf(&p->data);//输入元素值
     p->next=NULL;
     r->next=p;
     r=p; 
   }
}


http://www.kler.cn/news/368374.html

相关文章:

  • 嵌入式C语言字符串具体实现
  • 牛客周赛 Round 65(A—G)
  • C#实现简单的文件夹对比程序
  • KAN原作论文github阅读(readme)
  • 2024高等代数【南昌大学】
  • LCD手机屏幕高精度贴合
  • Zig 语言通用代码生成器:逻辑,冒烟测试版发布二
  • 学习qmake
  • 配置smaba (Linux与windows通信)
  • GPT打数模——电商品类货量预测及品类分仓规划
  • LeetCode9:回文数
  • golang将指针传给cgo后还能被回收吗?
  • 15-4连续子串和的整除问题
  • Android Studio历史版本下载
  • 开源模型应用落地-Qwen2-VL-7B-Instruct-vLLM-OpenAI API Client调用
  • jsp网上招标系统+lw视频讲解
  • 【论文阅读】Reliable, Adaptable, and Attributable Language Models with Retrieval
  • 基于stm32的HAL库的adc采集实验
  • 第18次CCF CSP认证真题解
  • 算法题总结(十九)——图论
  • Redis设计与实现 学习笔记 第十三章 客户端
  • Sora高端制造业WordPress外贸主题
  • 编程学习与心理健康:孩子会因学习编程而焦虑吗?
  • 远程:HTTP基本身份验证失败。提供的密码或令牌不正确,或者您的账户启用了两步验证,您必须使用个人访问令牌而不是密码。
  • BotScreen: Trust Everybody, but Cut the Aimbots Yourself
  • Django 5 增删改查 小练习