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

数据结构链式表

1.线性表的链式存储实现2.如何访问序号为i的元素?

3.如何求线性表的长度?

4.插入操作:

5.删除操作:(删除链表的第i(1<=i<=n)个位置上的结点)

(1)先找到链表的第i-1个结点,用p指向;

(2)再用指针s指向要被删除的结点(p的下一个节点)

(3)然后修改指针,删除s所指节点;

(4)释放s所指结点的空间;

#include <stdio.h>
#include <stdlib.h>

typedef struct lnode* list; 
struct lnode
{
    elementtype data;   //输入数据;存于结构体中;
    list next;   //定义一个指针,指向下一个结点;
};
struct lnode l;  //定义一个结构体对象
list ptrl;  //定义一个结构体指针

int length(list ptrl)  //求链表长度,传入起始结构体对象的指针
{
    list p = ptrl;    //p来表示起始指针
    int j = 0;   //用j来计数
    while(p)   //循环直到p为空
    {
        p = p->next;  //往后传递
        j++;  //计数增加
    }
    return j;   // 返回计数值,时间性能O(n)。
}

//按序号查找:
list findkth(int k, list ptrl)   //传入序号与起始指针
{
    list p = ptrl;   //中间量
    int i = 1;   
    while(p != NULL && i<k)
    {
        p = p->next;
        i++;
    }
    if(i == k)
        return p;
    else 
        return NULL;
}

//按值查找:

list find(elementtype x, list ptrl)
{
    list p = ptrl;
    while(p != NULL && p->data != x)
        p = p->next;
    return p;
}


list insert(elementtype x, int i, list ptrl)
{
    list p,s;
    if(i == 1)   //考虑放在起始位置的情况
    {
        s = (list)malloc(sizeof(struct lnode));
        s->data = x;
        s->next = ptrl;
        return s;
    }
    p = findkth(i-1, ptrl);   //不在起始位置,先找到i-1的位置
    if(p == NULL)
    {
        printf("参数i错");
        return NULL;
        
    }
    else
    {
        s = (list)malloc(sizeof(struct lnode));
        s->data = x;   
        s->next = p->next;      //令s中的传递指针指向原第i个元素的传递传递指针
        p->next = s;    //修改p(第i-1个结点)的传递指针
        return ptrl;   
    }
    
}


list delete(int i, list ptrl)    //删除对象的序号传入
{
    list p, s;
    if(i == 1)   //删除起始位置的情况
    {
        s = ptrl;
        if(ptrl != NULL)
            ptrl = ptrl->next;   //修改起始位置指针
        else return NULL;
        free(s);
        return ptrl;
    }
    p = findkth(i-1, ptrl);   //非删除起始位置,先找到i-1的位置
    if(p == NULL)   //如果i-1位置不存在,那i的位置一定不存在
    {
        printf("第%d个结点不存在",i-1);
        return NULL;
    }
    else if(p->next == NULL)   //i-1的位置存在,但i位置不存在
    {
        printf("第%d个结点不存在", i);
        return NULL;
    }
    else
    {
        s = p->next;
        p->next = s->next;
        free(s);
        return ptrl;
    }
}

相关文章:

  • 结合 Pandas 使用 SQLite3 实战
  • 大白话JavaScript实现一个函数,将数组中的元素进行去重
  • SPI驱动五) -- SPI_DAC上机实验(使用spidev)
  • 事务-Transaction
  • EXCEL自动化13 | 批量重命名工作簿中的工作表
  • 【AD】5-15 Active Route的自动布线辅助
  • postman接口请求中的 Raw是什么
  • 【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装
  • AIP-161 域掩码
  • AI 时代的新宠儿:向量数据库
  • 渗透测试之利用sql拿shell(附完整流程+防御方案)
  • 深度学习笔记——CNN卷积神经网络
  • Python----数据可视化(Seaborn一:介绍,应用)
  • css动画
  • GetWindowLongPtr函数分析
  • OpenCV 拆分、合并图像通道方法及复现
  • nginx的安装以及相关的全局性配置
  • K8s面试题总结(十一)
  • 使用Arduino和ESP8266进行基于物联网的垃圾箱监控
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_modules
  • 广东深圳网站建设服务/东莞营销网站建设直播
  • 网站怎么做图片动态/安徽网站seo
  • 定制网站建设公司/seo基础课程
  • 自己做的网站 能收索么/广州网站到首页排名
  • 北京天津网站建设哪家公司好/北京seo优化费用
  • 重庆营销网站建设/网站优化网络推广seo