#import <Foundation/Foundation.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node *next;
}List;//定义一个int类型的结构体,名字为List
List *insert(List *p,List *q);//插入函数,,p新元素插入位置,q 新元素中的数据域内容
List *create(void);//创建函数。
void print(List *head);//打印函数。
List *insert(List *p,List *q)//插入函数
{
List *k,*t;
t=p;
while(t!=NULL)
{
if(t->data>q->data)break;
k=t;
t=t->next;
}
q->next=k->next;
k->next=q;
return p;//p保持是最小的数。p 其实是整个链表。
}
List *create(void)
{
int i=0;
List *head,*p,*q;//p 为链表的元素,q为链表的尾。
head=(List *)malloc(sizeof(List));
q=p=(List *)malloc(sizeof(List));
scanf("%d",&q->data);
q->next=NULL;
while(q->data!=0)//判断尾是否为0;
{
i++;
if(i==1)
head->next=p;
else
{
if(q->data<p->data)//小于的时候使用头插法
{
q->next=p;
head->next=q;
p=q;
}
else p=insert(p,q);//大于的时候使用插入函数
}
q=(List *)malloc(sizeof(List));//每次添加一个尾,就新开辟一个新尾的空间。
scanf("%d",&q->data);
}
return head;
}
void print(List *head)
{
List *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);//P对象的元素值。
p=p->next;//把元素的值赋为下个元素的值。
}
}
int main (int argc, const char * argv[])
{
@autoreleasepool {
int x;
List *head,*p;
printf("请向链表中输入数值,按0结束:\n");
head=create();
printf("得到的链表为:\n") ;
print(head);
printf("\n");
printf("请输入一个数值,插入到链表中:\n");
scanf("%d",&x);
p=(List *)malloc(sizeof(List));
p->data=x;
head=insert(head,p);
printf("插入数值后的链表为:\n");
print(head);
}
return 0;
}
分享到:
相关推荐
本篇文章将深入探讨单链表的创建、排序、归并、插入、删除、定位、获取元素、计算元素个数以及打印链表等操作。 **1. 创建单链表** 创建单链表通常从创建头节点开始,头节点不存储任何数据,仅用于链接其他节点。...
在这个例子中,数字“1”将被添加到结果链表中,然后是“2”,因为“c”的ASCII值小于“s”。 4. **移动指针**:每次添加一个节点后,移动当前链表的指针到下一个节点。如果一个链表用尽,我们将另一个链表剩余的...
在本文中,我们将深入探讨如何使用Java来拆分双向链表,特别是在奇偶位置上进行拆分。双向链表是一种数据结构,其中每个...通过这种方式,我们可以解决许多其他涉及链表操作的算法问题,例如合并排序链表或链表的反转。
这个例子只展示了创建节点和在链表头部插入节点的基本操作。完整的链表类或结构体应包括上述所有操作的实现。通过理解并实践这些源码,可以更好地掌握单向链表的工作原理,为理解和实现更高级的数据结构奠定基础。在...
链表的排序函数bubbleSort将链表的头节点作为参数,并将链表的元素排序。链表的排序函数使用冒泡排序算法来排序链表的元素。 6. 查找单链表中第n个结点中的元素 链表的查找函数findElement将链表的头节点和结点的...
当链表创建完成后,头指针`head`指向链表的第一个元素。 2. **插入节点**:在链表中插入节点可能是在任何位置,包括头部、尾部或者中间。插入操作需要找到插入位置的前一个节点,然后更新它的`next`指针指向新插入...
输入示意图`AOV网的拓扑排序算法输入示意图.doc`可能包含一个具体的例子,展示了如何根据图表构造邻接表以及执行拓扑排序的预期输出。通过这个示例,你可以直观地看到拓扑排序在实际问题中的应用,以及算法如何处理...
我们通过一个简单的排行榜实例来了解双向链表的功能定义,以及如何基于双向链表进行排序操作。 文章中通过一个名为Rank的类来实现双向链表的基本功能,该类定义了节点数据结构,并提供了添加、删除和显示节点的方法...
第五个例子则是构建一个单向循环链表,并输出链表中的所有节点。 **有序链表**: - 通过比较每个新节点的数据,将其插入到正确的位置。 - 从链表头部开始,输出链表中的每个节点数据。 **单向循环链表**: - 创建...
该系统采用链表数据结构来存储图书信息,并提供了多种功能,包括创建链表、添加图书、删除图书、保存和读取链表到文件、查询和修改图书信息以及对图书进行排序。下面将详细介绍这些功能的实现。 1. **创建链表**:...
在这个例子中,没有提供具体的排序代码,但通常会根据总分对链表进行降序排序。 6. **删除与增加记录**: - 删除学生记录通常需要找到目标学生,然后断开其前一个节点与其的连接。 - 增加学生记录类似于链表的...
在本压缩包文件中,我们聚焦于C语言编程的一些实用技巧和算法实现,主要涉及到整数链表的操作、数组去重排序以及年历和旋转方阵的生成。这些知识点是C语言学习者必备的基础技能,也是算法设计和数据结构的重要组成...
在这个例子中,我们看到一个简单的C++实现,它使用链表数据结构来存储和操作学生数据。 首先,定义了一个名为`student`的类,它包含了学生的基本信息和成绩。这个类有以下成员: 1. `id`:学生的唯一标识符,通常是...
- **`list`**:双向链表,适用于频繁插入和删除操作的场景。 - **特点**: - 插入和删除操作非常快,不受位置限制。 - 支持`push_front`和`pop_front`方法。 - **示例**: ```cpp std::list<int> l1; l1.push...
报告中提到通过函数实现链表的操作,包括输入信息、输出信息、查询、修改和删除,这涉及到链表节点的创建、遍历和更新。链表结构可以使用指针链接元素,提供了一种灵活的数据存储方式。 4. **文件形式的保存**: -...
3. 添加联系人:创建新的节点,填充信息,然后将其链接到链表的适当位置。如果链表为空,则新节点成为头结点;否则,根据特定规则(如按姓名排序)插入新节点。 4. 查找联系人:遍历链表,对每个节点进行比较,直到...
插入元素到已排序的链表中,需要维护链表的排序属性。此函数通过查找合适位置,然后创建新节点并调整指针,将新元素按升序插入链表中。 #### (4) 打印元素 `Print` 用于格式化输出链表中单个元素的信息,包括学生的...
在这个项目中,可能使用了适合链表的排序算法,比如链表版本的快速排序。 4. **多项式相加**:两个多项式相加,只需要对应指数的项相加,如果一个多项式中没有某个指数,则另一多项式的相应项直接添加到结果中。在...
`display`函数用于输出链表中的所有工作记录,但在这个例子中并未实现完整的功能,因为它缺少处理冲突的逻辑。完整的`display`函数应该检查当前节点是否与其他节点有冲突(即其开始时间在其他节点的开始时间和结束...
1. **建立链表**:`chu_jian()` 函数用于创建一个空的链表,结构体 `book` 中包含图书的各种属性以及指向下一个节点的指针,形成链表结构。 2. **从文件中读取图书信息**:`load()` 函数从外部文件中读取图书数据,...