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

简介:

建立完整的单向链表

复制代码
#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");
}
 
复制代码

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!


本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4707695.html,如需转载请自行联系原作者

目录
相关文章
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
|
7月前
|
存储 Python
Python 实现单向链表,和单向链表的反转
链表是一种数据结构,每个节点存储相邻节点的位置信息。单链表中的节点仅存储下一节点的位置。通过Python实现单链表,定义`ListNode`类并关联节点可创建链表。例如,创建A-&gt;B-&gt;C的链表后,可通过反转函数`reverse`将链表反转为CBA。代码展示了如何实现和操作单链表。
139 6
Python 实现单向链表,和单向链表的反转
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
108 0
|
11月前
|
存储
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(一)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
128 1
|
11月前
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
153 0
|
11月前
|
存储 缓存
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(二)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
103 0
|
存储 JavaScript 前端开发
JavaScript实现单向链表
JavaScript实现单向链表
93 0
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
算法 C语言
数据结构——单向链表(C语言版)
数据结构——单向链表(C语言版)
112 2