`

C链表小结

阅读更多
#include<stdio.h>
#include<stdlib.h>

typedef struct node* point;

struct node{
   int data;
   point next;
};

typedef point LinkedList;

void initial(LinkedList* list);

int insertElem(int data,LinkedList list,int position);

int delElem(int position,LinkedList list);

void iteratorElem(LinkedList list);

int getElem(LinkedList list , int position);

int updateElem(LinkedList list, int position, int data);

bool isNull(LinkedList list);

int getLength(LinkedList list);


void initial(LinkedList* list){   //指向指针的指针,用于改变指针指向的指针指向的内存地址。
   *list = (LinkedList)malloc(sizeof(LinkedList));
   (*list)->next=NULL;   
}

int insertElem(LinkedList list,int position,int data){
   point p = list;
   int i = 0; //开始的,指向头结点,此节点的下标为0。p指向头结点位置
   while(p!=NULL&&i<position-1){ //获取position-1位置的point内存地址
   p = p->next;
   i++;//p指向线性表中第i个元素的地址
   }
   if(p == NULL){ //position-1位置不存在,就不能往列表中在插入position位置的值
   return NULL;
   }  
   point node = (point)malloc(sizeof(point));
   node->data = data;
   node->next=p->next;//注意顺序
   p->next = node;  
   return 1;
}

int delElem(int position,LinkedList list){
   point p = list;
   int i = 0;
   while(i<position-1&&p!=NULL){ //得到position-1位置的指针
   p=p->next;
   i++;
   }
   if(p == NULL){//该位置不存在,返回
    return NULL;
   }
   point temp = p->next;   
   p->next = temp->next; //删除节点操作
  // free(temp);//释放堆内存
   return 1;
}

void iteratorElem(LinkedList list){
   point p = list->next;
   int i = 0;
   printf("\n======================================================\n");
   while(p!=NULL){
   i++;
   printf("%d  =  %d\t",i,p->data);
   p=p->next;
   }
   printf("\n======================================================\n");
}

int getElem(LinkedList list , int position){
   point p = list;
   int i = 0;
   while(p!=NULL && i<position){
      p = p->next;
  i++;
   }
   if(p==NULL){
   return NULL;
   }
   return p->data;
}

int updateElem(LinkedList list, int position, int data){
point p = list;
int i = 0;
while(i<position&&p!=NULL){
p=p->next;
i++;
}
if(p==NULL){
return NULL;
}
p->data = data;
    return 1; 
}

bool isNull(LinkedList list){
point p = list->next;
if(p->next!=NULL)
return false;
else
return true;
}

int getLength(LinkedList list){
point p = list;
int  i=0;
while(p!=NULL){
p=p->next;
i++;
}
return i;
}





void main(void){
    LinkedList list = NULL;
initial(&list);
if(list == NULL){
printf("ssss");
}
int num ;
for(int i = 0;i<10;i++){
scanf("%d" , &num);
int result = insertElem(list,i+1,num);
if(result == NULL){
printf("%d insert error \n",num);
}
}
iteratorElem(list);
updateElem(list,5,100);
iteratorElem(list);
delElem(5,list);
delElem(9,list);
iteratorElem(list);
printf("\n%d",getLength(list));
printf("\n%d",getElem(list,3));
}
分享到:
评论

相关推荐

    c语言链表数组-c语言手写单链表实现,数组和链表结构对比小结和个人理解 数组和链表.pdf

    "C语言链表数组" 在学习编程语言时,大家常常遇到数组和链表这两种数据结构。今天,我们将深入探讨C语言中链表数组的实现和数组与链表结构的对比,并结合个人理解和实践经验来分析它们的优缺。 一、链表数组的实现...

    图书管理系统(C语言链表实现)含实验报告

    大学期间用C语言链表实现的一个图书管理系统,主要功能有 a. 设备申请。由专业人员填写“申请表”送交领导批准购买。 b. 设备入库。新设备购入后要立即进行设备登记(包括类别、设备名、型号、规格、单价、数量、...

    两个有序链表序列的合并_C语言_

    在编程领域,特别是数据结构和算法中,"两个有序链表...此外,`两个有序链表序列的合并.c`文件包含了上述逻辑的完整实现,而`两个有序链表序列的合并.exe`文件则是编译后的可执行程序,可以直接运行以测试代码的功能。

    c语言数据结构的小结

    "C语言数据结构的小结"是一个针对初学者的指南,旨在帮助他们理解并掌握C语言中的数据结构概念。数据结构是计算机科学的核心组成部分,它涉及到如何有效地组织和管理数据,以便于高效地访问和操作。 首先,我们要...

    数据结构实验报告-利用链表实现简易学生信息管理系统(C语言)

    主要内容包括实验目的、实验环境配置、具体实现的源代码、实验运行截图以及最后的小结。以下是针对该实验报告中的各个知识点进行的详细解析。 #### 实验目的 1. **理解链表的基本概念**:链表是一种常见的线性表...

    C语言+链表实现图书信息管理系统+C语言期末结课作业

    运用链表实现图书信息的管理,主要包含图书信息的增删改查,以及将链表中存储的图书信息保存为txt文件,属于C语言入门级练手小项目,可以作为C语言结课大作业的参考。比较适合刚学C语言编程的大学生。该源码在VS2017...

    数据结构:图解链表,用链表实现栈的Pop和Push(c语言版)

    #### 小结 通过以上分析,我们可以看到使用链表实现栈的Pop和Push操作是相对直观和简单的。在实现过程中需要注意的关键点包括: 1. 确保栈顶指针始终指向最新的栈顶节点。 2. 在进行出栈操作时,正确处理空栈的情况...

    数据结构源代码之双向链表

    #### 小结 本文档介绍了双向链表的实现方法及其基本操作的C语言实现。双向链表相比于单链表具有更高的灵活性和效率,尤其是在需要频繁地从前向后或从后向前遍历链表的情况下。通过这些基本操作,可以实现对双向链表...

    Linux 内核通用链表学习小结

    Linux内核通用链表是操作系统内核中一种高效的数据结构,用于存储和管理动态数据集。本文将深入探讨Linux内核通用链表的原理、结构、宏定义以及使用方法。 首先,内核提供的通用链表库是双向链表,这意味着每个链表...

    c语言程序设计报告链表实现学生信息管理.docx

    五、实践小结 通过这次设计,学生不仅巩固了C语言的基础知识,如函数、循环,还初次接触并理解了链表这一重要数据结构。同时,体验了实际编程过程中的问题解决和团队协作,认识到持续练习和调试的重要性。 六、源...

    C语言循环结构小结.pdf

    C语言循环结构小结 C语言中的循环结构是编程语言中最基本也是最重要的控制结构之一,循环结构允许程序员控制程序的执行流程,使得程序能够重复执行某些操作以达到特定的目的。在C语言中,循环结构主要有三种:for...

    数据结构链表实验源代码

    ### 小结 本代码示例不仅涵盖了链表的基本定义与创建,还提供了更高级的操作,如集合运算等。这些操作在实际编程中非常有用,可以帮助我们更好地理解和应用链表这一数据结构。通过学习这段代码,读者可以进一步掌握...

    数据结构课程设计二叉树采用二叉链表作为存储结构

    ```c // 二叉树节点的定义 typedef struct Node { int data; struct Node* left; struct Node* right; } Node; // 队列的实现 typedef struct Queue { Node* front; Node* rear; } Queue; // 按层次顺序遍历...

    关于C语言程序设计小结

    灵活使用指针可以提高程序的执行效率,实现复杂的数据结构,如链表、树、图等。不过,指针也是C语言中最容易出错的语法点,需要在使用时格外小心。 5. 宏定义和条件编译:在C语言中,宏定义是一种将常量、简单的...

    链表的基本操作链表的基本操作

    ### 小结 通过本实验,学生不仅能够深入了解链表这一重要数据结构的特点,还能掌握如何利用 C 语言进行高效的数据处理。此外,通过实际编程操作,学生可以进一步提升自己的编程能力和解决问题的能力。这对于后续...

    嵌入式高级C语言进阶-第五讲 数据结构与链表

    #### 小结 本课程介绍了高级C语言中的几种重要数据结构:结构体、联合体和枚举。通过这些数据结构,开发者可以更好地管理和组织数据,提高程序的效率和可维护性。在嵌入式系统开发中,正确理解和使用这些数据结构...

    C/C++指针小结

    《C/C++指针小结》 指针是C/C++编程中不可或缺的一部分,它具有强大的功能和灵活性,但同时也带来了复杂性。理解和掌握指针是深入学习这两种语言的关键。本文将围绕指针的四方面内容展开:指针的类型、指针所指向的...

    java集合小结

    ### Java集合小结 #### 一、集合的概念与重要性 集合是Java编程语言中用于存储、管理和操作数据的一种重要工具。它提供了多种数据结构来适应不同的应用场景,从而有效地提高程序开发效率。从数据结构的角度来看,...

    小甲鱼C-C语言描述数据结构 笔记.pdf

    数据结构和C语言是计算机科学...通过学习小甲鱼的C语言数据结构课程,你可以深入理解如何利用C语言实现各种数据结构,并掌握评估和优化算法效率的方法。这不仅有助于提升编程技能,也是成为一名优秀程序员的关键步骤。

Global site tag (gtag.js) - Google Analytics