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

建立完整的单向动态链表(包括初始化、创建、插入、删除、查找、销毁、输出)...

建立完整的单向链表

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
     int data;//数据部分
     struct node *next;//指针部分
}Node;
typedef Node List;
//初始化链表
List* initList();
//销毁链表
void destoryList(List *list);
//插入数据
void insertData(List *list,int Data);
//删除数据
void removeData(List *list,int Data);
//查找数据
Node* findData(List *list,int Data);
//打印链表内容
void printList(List *list);
int main()
{
        //初始化链表
        List *list = initList(); 
        //插入数据
        for(int i=0; i<10; i++)
        {
             insertData(list,i);
        }
        printList(list);
        //查找数据
        printf("5的地址:%p\n",findData(list,5));
        printf("10的地址:%p\n",findData(list,10));
        //删除数据
        removeData(list,0);
        printList(list);
        //销毁链表
        destoryList(list);
return 0;
}
//初始链表
List* initList()
{
        List *list = (List*)malloc(sizeof(Node));
        list->data = 0;
        list->next = NULL;
        return list;
}
//销毁链表
void destoryList(List *list)
{
        Node *pHead = list;//用来记录初始化的链表头结点
        while(list != NULL)
        {
                  //先移到下一个结点
                  list = list->next;
                  //释放头结点
                  free(pHead);
                  //记录新的头结点
                 pHead = list;
         }
}
//插入数据(一般都在表尾插入数据)
void insertData(List *list,int Data)
{
         //先分配一个新的结点
        Node *pNode = (Node*)malloc(sizeof(Node));
        pNode->data = Data;
        pNode->next = NULL;
        //将新结点链接到到尾部
       while(list->next != NULL)
       {
                  list = list->next;//先找到链表的尾结点
        }
       list->next = pNode;//将新结点链接到尾结点
}
//删除数据(头结点不可删除,不然后面的结点就无法再进行遍历了)
void removeData(List *list,int Data)
{
        //1.查找结点,并记录上一个结点
        //Node *pPre = NULL;
        Node *pPre = list;
        list = list->next;//跳过头结点
        while(list!= NULL)
        {
                 if(list->data == Data)
                {
                              break;
                }
                pPre = list;
                list = list->next;
       }
       if(list!=NULL)
       {
                //2.找到后,将上一个结点和当前结点的下一个结点链接
                pPre->next = list->next;
               //3.删除当前结点
                free(list);
      }
}
//查找数据
Node* findData(List *list,int Data)
{
     while(list!= NULL)
     {
                 if(list->data == Data)
                {
                      break;
                }
               list = list->next;
      }
return list;
}
//打印链表内容
void printList(List *list)
{
      list = list->next;//跳过头结点
      while(list!= NULL)
      {
               printf("%5d",list->data);
              list = list->next;
      }
      printf("\n");
}
 

 

相关文章:

  • 【Go】Linux下使用Sublime Text搭建开发环境
  • 双nginx(主备、主主)反向代理tomcat实现web端负载均衡
  • c# 笔试题及参考答案大全
  • 如果有一天你没有了动力,可以看看
  • winsock 收发广播包
  • Oracle开发中的正则表达式
  • 选择算法
  • 【点杀iOS】深拷贝浅拷贝copy的那些事儿
  • 【性能调优】如何将Hybris启动时间减少30%-50%
  • springJDBC一对多关系,以及Java递归,jsp递归的实现
  • 如何修改myeclipse中web项目的工作路径或默认路径
  • Leetcode——最长不重复子串
  • 修改 SVN 账户密码的方法
  • 一个有趣的算法题。。。
  • Codeforces Gym 100733A Shitália 计算几何
  • 【附node操作实例】redis简明入门系列—字符串类型
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • create-react-app项目添加less配置
  • iOS 系统授权开发
  • October CMS - 快速入门 9 Images And Galleries
  • PAT A1120
  • python 装饰器(一)
  • vue 个人积累(使用工具,组件)
  • 基于HAProxy的高性能缓存服务器nuster
  • 排序算法之--选择排序
  • 前端之React实战:创建跨平台的项目架构
  • 山寨一个 Promise
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • NLPIR智能语义技术让大数据挖掘更简单
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​如何防止网络攻击?
  • #Ubuntu(修改root信息)
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (1)STL算法之遍历容器
  • (10)ATF MMU转换表
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)fgets与fputs函数详解
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Note)C++中的继承方式
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (接口封装)
  • (一) springboot详细介绍
  • (一)Dubbo快速入门、介绍、使用
  • (译) 函数式 JS #1:简介
  • .NET Core引入性能分析引导优化
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .Net Web项目创建比较不错的参考文章
  • /etc/motd and /etc/issue
  • /etc/skel 目录作用
  • @Autowired 与@Resource的区别
  • [ JavaScript ] JSON方法
  • [④ADRV902x]: Digital Filter Configuration(发射端)