#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语言中链表数组的实现和数组与链表结构的对比,并结合个人理解和实践经验来分析它们的优缺。 一、链表数组的实现...
大学期间用C语言链表实现的一个图书管理系统,主要功能有 a. 设备申请。由专业人员填写“申请表”送交领导批准购买。 b. 设备入库。新设备购入后要立即进行设备登记(包括类别、设备名、型号、规格、单价、数量、...
在编程领域,特别是数据结构和算法中,"两个有序链表...此外,`两个有序链表序列的合并.c`文件包含了上述逻辑的完整实现,而`两个有序链表序列的合并.exe`文件则是编译后的可执行程序,可以直接运行以测试代码的功能。
"C语言数据结构的小结"是一个针对初学者的指南,旨在帮助他们理解并掌握C语言中的数据结构概念。数据结构是计算机科学的核心组成部分,它涉及到如何有效地组织和管理数据,以便于高效地访问和操作。 首先,我们要...
主要内容包括实验目的、实验环境配置、具体实现的源代码、实验运行截图以及最后的小结。以下是针对该实验报告中的各个知识点进行的详细解析。 #### 实验目的 1. **理解链表的基本概念**:链表是一种常见的线性表...
运用链表实现图书信息的管理,主要包含图书信息的增删改查,以及将链表中存储的图书信息保存为txt文件,属于C语言入门级练手小项目,可以作为C语言结课大作业的参考。比较适合刚学C语言编程的大学生。该源码在VS2017...
#### 小结 通过以上分析,我们可以看到使用链表实现栈的Pop和Push操作是相对直观和简单的。在实现过程中需要注意的关键点包括: 1. 确保栈顶指针始终指向最新的栈顶节点。 2. 在进行出栈操作时,正确处理空栈的情况...
#### 小结 本文档介绍了双向链表的实现方法及其基本操作的C语言实现。双向链表相比于单链表具有更高的灵活性和效率,尤其是在需要频繁地从前向后或从后向前遍历链表的情况下。通过这些基本操作,可以实现对双向链表...
Linux内核通用链表是操作系统内核中一种高效的数据结构,用于存储和管理动态数据集。本文将深入探讨Linux内核通用链表的原理、结构、宏定义以及使用方法。 首先,内核提供的通用链表库是双向链表,这意味着每个链表...
五、实践小结 通过这次设计,学生不仅巩固了C语言的基础知识,如函数、循环,还初次接触并理解了链表这一重要数据结构。同时,体验了实际编程过程中的问题解决和团队协作,认识到持续练习和调试的重要性。 六、源...
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语言中最容易出错的语法点,需要在使用时格外小心。 5. 宏定义和条件编译:在C语言中,宏定义是一种将常量、简单的...
### 小结 通过本实验,学生不仅能够深入了解链表这一重要数据结构的特点,还能掌握如何利用 C 语言进行高效的数据处理。此外,通过实际编程操作,学生可以进一步提升自己的编程能力和解决问题的能力。这对于后续...
#### 小结 本课程介绍了高级C语言中的几种重要数据结构:结构体、联合体和枚举。通过这些数据结构,开发者可以更好地管理和组织数据,提高程序的效率和可维护性。在嵌入式系统开发中,正确理解和使用这些数据结构...
《C/C++指针小结》 指针是C/C++编程中不可或缺的一部分,它具有强大的功能和灵活性,但同时也带来了复杂性。理解和掌握指针是深入学习这两种语言的关键。本文将围绕指针的四方面内容展开:指针的类型、指针所指向的...
### Java集合小结 #### 一、集合的概念与重要性 集合是Java编程语言中用于存储、管理和操作数据的一种重要工具。它提供了多种数据结构来适应不同的应用场景,从而有效地提高程序开发效率。从数据结构的角度来看,...
数据结构和C语言是计算机科学...通过学习小甲鱼的C语言数据结构课程,你可以深入理解如何利用C语言实现各种数据结构,并掌握评估和优化算法效率的方法。这不仅有助于提升编程技能,也是成为一名优秀程序员的关键步骤。