C语言的链表的相关操作

本变博客源于自己想复习一下C语言,所以便自己动手复习了一下链表的相关操作。做个人记录使用。

main.c

c 复制代码
#include <stdio.h>
#include "list.h"

int main()
{
  student *a;
   printf("hello world\n") ;
   printf("----初始化列表----------\n");
   a=init();
   printf("----创建列表----------\n");
   create_front_list(a,3);
   printf("list的个数为:count= %d\n",count);
    printf("----读取列表3位置上数据----------\n");
   read_any_list(a,3);
   printf("------------读取全部数据------------------\n");
   read_all_list(a);
   printf("----------插入列表,插入到位4的后面--------------------\n");
   insert_behind_list(a ,4);
   printf("----------插完后的列表数据---------\n");
   read_all_list(a);
   printf("------------删除列表指定位置的数据-------------------\n");
   delete_list(a,2);
   printf("-------------删除后列表的数据------------------\n");
   read_all_list(a);
   return 0;
}

list.c

c 复制代码
#include<stdio.h>
#include <stdlib.h>
#include "list.h"
int count = 0;
student *init()
{

    //chuangjian节点

   student * head=(struct student *)malloc(sizeof(student));
    if(head==NULL)
    {
        printf("n=malloc failed \n");
        return NULL;
    }
    head->num=0;
    head->score=99.2;
    head->next=NULL;
    count++;
    return head;

}

//链表的建立
void create_front_list(student *head,int n)
{   int i;
    student * last;
    student * s;
    last=head;
    s=head;
    printf("请你输入%d个整数\n",n);
    for(i=0;i<n;i++)
    {
        printf("begin to input\n");
        s->next=(struct student *)malloc(sizeof(student));
        last=s->next;
        s=last;
        scanf("%d,%f",&(s->num),&(s->score));
        printf("end to input\n");
        count++;
    }
    s->next=NULL;
    last=NULL;
    s=NULL;
    return ;
}

//链表的读取操作
void read_all_list(student * head)
{
    int i;

    printf("total data in list is \n");
    student *re=head;

   if(head==NULL)
    {
        printf("NO data\n");
       return ;
    }

    else
    {
       for(i=0;i<count;i++)
    {
        printf("num = %d  score= %f \n",re->num, re->score);
        re=re->next;
    }
      }


}

//读取其中指定第几个节点的数值
void read_any_list(student * head,int n)
{  int i=1;

   student *re=head;
   printf("That you want to read list sequence is  %d\n",n);
   if(n>count)
   {
        printf("The number you have input exceeds the max length of this list \n ");
        return ;
   }
    else
    {
     while(true)
       {
           re=re->next;
            i++;
       if(i==n)
       {
           printf("the number has been find ,data as follow \n");
           printf("num= %d, score= %f\n",re->num,re->score);
           break;
       }
       }

        return ;
    }

}

//链表的插入

//由于是单链表所以我这里只使用尾部
void insert_behind_list(student * head ,int n)
{
  printf("insert behind list \n\n");
  int i;
  student * s=head;

  if(n>count)
  {
      //表名插入的位置已经查过了节点长度
      printf("you has exceed this max length\n");
      return ;

  }
    else
    {    //开辟一个新的节点
         student * last=(struct student *)malloc(sizeof(student));
         printf("please input your inserted data \n");
         scanf("%d,%f",&(last->num),&(last->score));

         for(i=1;i<n;i++)
         {

             s=s->next;//借助一个指针指向你想插入的节点前面
         }
         last->next=s->next;
         s->next=last;
         last=NULL;
    printf("---------end of insert data--------\n");
    count++;

    }

}


//链表的删除
void delete_list(student * head,int n)
{
    int i;
    student * s=head;
    student * q=head->next;
    printf("the number do you want to delete is number %d",n);
    if(n>count)
    {
        printf("there are no data \n");
    }
    else
    {

        for(i=1;i<n;i++)
        {
            s=s->next;
            q=q->next;

        }
        printf("你想删除的数据是:%d,%f",q->num,q->score);
        s->next=q->next;
        free(q);
        count--;//记录节点的个数的

    }

}

list.h

c 复制代码
#define true 1
#define flase 0


 typedef struct student{
 int num;
 float score;
 struct student *next ;

 }student;
extern int count;
student *init();
void create_front_list(student *head,int n);
void read_all_list(student * head);
void read_any_list(student * head,int n);
void insert_behind_list(student * head ,int n);
void delete_list(student * head,int n);

 
备注:每次更改操作后必须使用count--,否则内存就会出现泄漏。

 

hello world

----初始化列表----------

----创建列表----------

请你输入3个整数

begin to input

1,1

end to input

begin to input

2,2

end to input

begin to input

3,3

end to input

list的个数为:count= 4

----读取列表3位置上数据----------

That you want to read list sequence is 3

the number has been find ,data as follow

num= 2, score= 2.000000

------------读取全部数据------------------

total data in list is

num = 0 score= 99.199997

num = 1 score= 1.000000

num = 2 score= 2.000000

num = 3 score= 3.000000

----------插入列表,插入到位4的后面--------------------

insert behind list

please input your inserted data

4,4

---------end of insert data--------

----------插完后的列表数据---------

total data in list is

num = 0 score= 99.199997

num = 1 score= 1.000000

num = 2 score= 2.000000

num = 3 score= 3.000000

num = 4 score= 4.000000

------------删除列表指定位置的数据-------------------

the number do you want to delete is number 2你想删除的数据是:2,2.000000-------------删除后列表的数据------------------

total data in list is

num = 0 score= 99.199997

num = 1 score= 1.000000

num = 3 score= 3.000000

num = 4 score= 4.000000

Process returned 0 (0x0) execution time : 27.276 s

Press any key to continue.


相关推荐
蹊黎13 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
爱聊灵光的维C15 小时前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
AI+程序员在路上16 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能
揽星河..17 小时前
【C语言】扫雷游戏
c语言·算法·游戏
冻柠檬飞冰走茶18 小时前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法
冻柠檬飞冰走茶19 小时前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
Lxx_Zw1 天前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·stm32·单片机·嵌入式硬件
wuminyu1 天前
JVM执行引擎学习总结:热点字节码编译成本地机器码
java·linux·c语言·jvm·c++
佳得动1 天前
编译和链接的认识(C语言)
c语言·开发语言
starzy19901 天前
Scala List操作:不可变链表的函数式美学
链表·list·scala