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

简介:

建立完整的单向链表

复制代码
#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,如需转载请自行联系原作者

目录
相关文章
|
1月前
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
|
6月前
|
存储 算法 C语言
【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)
一、链表的概念 二、特点 三、链表的分类 四、单向链表的结构体 命名规范: 二级指针 ❗️注意事项 五、函数实现 1.单链表的打印
【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)
|
7月前
|
Java
面试题-手写一个单向链表
面试题-手写一个单向链表
36 0
|
2月前
|
存储
数据结构 模拟实现LinkedList单向不循环链表
数据结构 模拟实现LinkedList单向不循环链表
33 0
|
2月前
|
存储 Python
如何在Python中实现单向链表和双向链表?
如何在Python中实现单向链表和双向链表?
|
3月前
|
缓存 算法 Java
6.单向链表正确实现方式
6.单向链表正确实现方式
41 1
|
3月前
|
存储 程序员 C语言
链表篇---单向链表的C语言实现
链表篇---单向链表的C语言实现
|
3月前
|
存储 缓存 算法
Algorithms_基础数据结构(02)_线性表之链表_单向链表
Algorithms_基础数据结构(02)_线性表之链表_单向链表
38 0
|
4月前
|
存储 C语言
链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)
在上一篇文章中,我们探索了顺序表这一基础的数据结构,它提供了一种有序存储数据的方法,使得数据的访 问和操作变得更加高效。想要进一步了解,大家可以移步于上一篇文章:探索顺序表:数据结构中的秩序之美 今天,我们将进一步深入,探讨另一个重要的数据结构——链表 链表和顺序表一样,都属于线性表,也用于存储数据,但其内部结构和操作方式有着明显的不同。通过C语言的具体实现,我们将会更加直观地理解它
109 1
链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)
|
4月前
|
存储
队列的学习(一)用数组和链表实现单向队列
队列的学习(一)用数组和链表实现单向队列 队列(Queue)是一种先进先出的数据结构,类似于现实生活中排队的场景。它有两个基本操作:入队(enqueue)和出队(dequeue)。在本文中,我们将介绍如何使用数组和链表来实现单向队列。