先创建结构体
struct student {
int data;
//int tag;//标记这是第几个
struct student *next;
};
// addone 用于将一个数插入已从小到大排好序的链中
struct student *addone(struct student *h,int x){
if(h==NULL) //??????
printf("this is NULL");
int tag=0;//假设还没添加进入链
struct student *p=h,*temp=NULL,*temp1=NULL;
temp1=(struct student * )malloc(sizeof(struct student));//创建内存
temp1->data=x;
printf("%d",temp1->data);
if(h==NULL){//若链为空
h=temp1;
h->next=NULL;
p=h->next;
}
while(p!=NULL){
if(p->data>x){
temp1->next=p;
if(temp==NULL){ //若第一个元素就满足条件的话
h=temp1;
tag=1;//已经插入
break;
}
else{ //若不是第一个满足条件
// printf("0");
temp->next=temp1;
//printf("a");
tag=1;
//printf("b");
break;
}
}
temp=p;//本轮该数不满足条件将它的地址存起来方便下一个满足条件的数进行连接
printf("r ");
p=p->next;
}
if(!tag){//若循环完都没满足条件的说明只能插在最后
temp1->next=NULL;
temp->next=temp1;
tag=0;
}
return h;//插入完成返回指针
}
//删除传入的与x所有相同的数
struct student *deleteEle(struct student *h,int x){
struct student *p=h,*temp=NULL,*temp1=NULL; //init
if(h==NULL){ /*若链表为空*/
printf("null");
return 0;
}
while(p!=NULL){ //当该元素不为空时
if(p->data==x){
if(temp==NULL){ //if it's the same and it's the first one;free it and set head;
printf("%d\n",h);
h=p->next;
free(p);
p=h; //and 更新指针p让它指向head 这样可以继续执行delete
printf("%d\n",h);
}
else{ //not the first one(include the last one!if the last one jump out! else continue!)
temp->next=p->next;
free(p);
p=temp->next;
}
//temp1=p;
continue; //the p is right;don't need to go
}
temp=p;//if it's not the the same;continue the next one;
p=p->next;
}
return h;//返回头指针
}
分享到:
相关推荐
本话题将深入探讨如何在C语言中使用单链表,并实现一个特定的删除算法。 首先,单链表是一种线性数据结构,其中每个元素(节点)包含两个部分:数据域和指针域。数据域存储实际的值,而指针域指向链表中的下一个...
本文将深入探讨单链表的创建、插入和删除等基本操作,旨在为初学者提供一个清晰的理解和实践指导。 首先,我们来了解什么是单链表。单链表是由一系列节点组成的数据结构,每个节点包含两个部分:数据域,用于存储...
顺序表与单链表基本运算算法 顺序表是一种基本的数据结构,它是由一组连续的存储单元组成的,每个存储单元都可以存储一个数据元素。顺序表的基本运算包括创建顺序表、打印顺序表、查找顺序表中的元素、插入元素到...
由于删除算法与插入算法类似,因此这里不再赘述。 六、单链表的应用实例 单链表可以应用于各种数据存储和处理场景,例如实现链表的合并、排序等操作。下面是一个使用单链表实现链表合并的实例: ```cpp void Union...
在计算机科学中,理解并掌握单链表的插入、删除和遍历等操作是至关重要的,因为它们构成了许多高级数据结构和算法的基础。 首先,我们来详细探讨单链表的结构。每个节点通常包含两个部分:数据域和指针域。数据域...
本文将通过一个具体的C++程序示例来详细讲解单链表的基本操作,包括创建链表、打印链表、获取指定位置的元素、插入新元素以及删除指定位置的元素等。 #### 二、环境与准备 本示例使用的开发环境为C++,主要涉及的...
**删除**操作是与插入相反的过程,它涉及到找到要删除的节点,并修改相邻节点的指针以保持链表的连续性。在单链表中,删除操作比数组或双链表更复杂,因为只能通过前一个节点访问当前节点。 **求表长**是指计算链表...
### 单链表的创建与插入 #### 一、单链表基础知识 单链表是一种基本的数据结构,其中每个元素包含两部分:数据域和指针域。数据域用于存储实际的数据,而指针域则指向下一个元素。单链表的特点在于它的线性顺序...
单链表的创建、插入和删除 单链表是一种基本的数据结构,它由多个节点组成,每个节点都包含一个数据元素和一个指向下一个节点的指针。下面是单链表的创建、插入和删除的详细知识点: 1. 单链表的创建 创建单链表...
总结来说,单链表是数据结构的基础,理解其建立、插入和删除操作对于学习更复杂的算法和数据结构至关重要。在C语言中实现这些操作需要对指针和内存管理有深入的理解。这个实验为学生提供了实践经验,以巩固理论知识...
本文将详细阐述如何使用C++来实现单链表的基本操作,包括创建、遍历、插入、删除、判断空、计算长度以及查找节点。 首先,我们从创建单链表开始。单链表是由一系列节点组成的数据结构,每个节点包含一个数据元素和...
2. 删除节点:找到要删除节点的前一个节点,更新它的next指向被删除节点的next。 3. 遍历链表:从头节点开始,通过逐个访问next指针遍历所有节点。 4. 查找节点:从头节点开始,逐个比较数据域直到找到目标节点或...
这使得插入和删除操作相对高效,但查找操作相对较慢。 **二、简单选择排序算法** 简单选择排序的基本思想是在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找...
1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值); 2、查找单链表中的第i个结点,并输出结点元素的值; 3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入); 4...
在C语言中,单链表是一种基础且重要的数据结构,用于存储动态集合。单链表中的每个元素称为节点,...通过练习创建、插入、删除和打印单链表,你可以提高对C语言和数据结构的理解,这对成为一名优秀的C程序员至关重要。
单链表是一种基础的数据结构,它在计算机科学中扮演着重要的角色,特别是在数据存储和算法设计方面。单链表由一系列节点组成,每个节点包含数据元素以及指向下一个节点的引用,最后一个节点的引用通常为null,标志着...
本文将深入探讨单链表的创建、插入、删除、查找以及求长度的操作。 ### 创建单链表 创建一个空的单链表首先需要定义一个节点结构体,通常包括数据域和指针域。例如: ```c typedef struct Node { int data; ...
在这个“单链表的创建添加删除和逆置”的主题中,我们将深入探讨如何在C语言中实现这些操作。 首先,让我们了解单链表的基本结构。每个节点通常定义为一个结构体,例如: ```c typedef struct Node { int data; /...
//创建单链表 void menu2(); //读取指定位置元素 void menu3(); //在指定位置前插入新元素 void menu4(); //删除指定位置元素 void menu5(); //输入元素值查找第一个等于给定值的元素 void menu6(); //...
实验报告中给出了单链表的源程序代码,包括创建单链表、插入、删除、查找和合并操作的代码,这些代码可以作为参考,帮助读者更好地理解单链表的基本操作。 六、实验总结 本实验报告通过实现单链表的基本操作,掌握...