`
zjjzmw1
  • 浏览: 1366164 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

链表的创建,添加,排序,输出的简单例子

    博客分类:
  • iOS
阅读更多
#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. **移动指针**:每次添加一个节点后,移动当前链表的指针到下一个节点。如果一个链表用尽,我们将另一个链表剩余的...

    拆分双向链表.zip

    在本文中,我们将深入探讨如何使用Java来拆分双向链表,特别是在奇偶位置上进行拆分。双向链表是一种数据结构,其中每个...通过这种方式,我们可以解决许多其他涉及链表操作的算法问题,例如合并排序链表或链表的反转。

    数据结构:单向链表源码

    这个例子只展示了创建节点和在链表头部插入节点的基本操作。完整的链表类或结构体应包括上述所有操作的实现。通过理解并实践这些源码,可以更好地掌握单向链表的工作原理,为理解和实现更高级的数据结构奠定基础。在...

    C语言 数据结构链表的实例(十九种操作)

    链表的排序函数bubbleSort将链表的头节点作为参数,并将链表的元素排序。链表的排序函数使用冒泡排序算法来排序链表的元素。 6. 查找单链表中第n个结点中的元素 链表的查找函数findElement将链表的头节点和结点的...

    深入理解链表的各类操作详解

    当链表创建完成后,头指针`head`指向链表的第一个元素。 2. **插入节点**:在链表中插入节点可能是在任何位置,包括头部、尾部或者中间。插入操作需要找到插入位置的前一个节点,然后更新它的`next`指针指向新插入...

    数据结构之AOV网的拓扑排序算法

    输入示意图`AOV网的拓扑排序算法输入示意图.doc`可能包含一个具体的例子,展示了如何根据图表构造邻接表以及执行拓扑排序的预期输出。通过这个示例,你可以直观地看到拓扑排序在实际问题中的应用,以及算法如何处理...

    PHP基于双向链表与排序操作实现的会员排名功能示例

    我们通过一个简单的排行榜实例来了解双向链表的功能定义,以及如何基于双向链表进行排序操作。 文章中通过一个名为Rank的类来实现双向链表的基本功能,该类定义了节点数据结构,并提供了添加、删除和显示节点的方法...

    数据结构上机考试(含答案).doc

    第五个例子则是构建一个单向循环链表,并输出链表中的所有节点。 **有序链表**: - 通过比较每个新节点的数据,将其插入到正确的位置。 - 从链表头部开始,输出链表中的每个节点数据。 **单向循环链表**: - 创建...

    C语言图书管理系统代码.pptx

    该系统采用链表数据结构来存储图书信息,并提供了多种功能,包括创建链表、添加图书、删除图书、保存和读取链表到文件、查询和修改图书信息以及对图书进行排序。下面将详细介绍这些功能的实现。 1. **创建链表**:...

    学生成绩管理系统C语言版(精).doc

    在这个例子中,没有提供具体的排序代码,但通常会根据总分对链表进行降序排序。 6. **删除与增加记录**: - 删除学生记录通常需要找到目标学生,然后断开其前一个节点与其的连接。 - 增加学生记录类似于链表的...

    C一些有用的程序_C语言_outerpja_

    在本压缩包文件中,我们聚焦于C语言编程的一些实用技巧和算法实现,主要涉及到整数链表的操作、数组去重排序以及年历和旋转方阵的生成。这些知识点是C语言学习者必备的基础技能,也是算法设计和数据结构的重要组成...

    学生管理系统

    在这个例子中,我们看到一个简单的C++实现,它使用链表数据结构来存储和操作学生数据。 首先,定义了一个名为`student`的类,它包含了学生的基本信息和成绩。这个类有以下成员: 1. `id`:学生的唯一标识符,通常是...

    STL标准模板库的例子

    - **`list`**:双向链表,适用于频繁插入和删除操作的场景。 - **特点**: - 插入和删除操作非常快,不受位置限制。 - 支持`push_front`和`pop_front`方法。 - **示例**: ```cpp std::list&lt;int&gt; l1; l1.push...

    南师大数据结构课程设计报告 (2).docx

    报告中提到通过函数实现链表的操作,包括输入信息、输出信息、查询、修改和删除,这涉及到链表节点的创建、遍历和更新。链表结构可以使用指针链接元素,提供了一种灵活的数据存储方式。 4. **文件形式的保存**: -...

    学生通讯录管理系统

    3. 添加联系人:创建新的节点,填充信息,然后将其链接到链表的适当位置。如果链表为空,则新节点成为头结点;否则,根据特定规则(如按姓名排序)插入新节点。 4. 查找联系人:遍历链表,对每个节点进行比较,直到...

    数据结构C语言版_单链表实现学生健康情况登记表

    插入元素到已排序的链表中,需要维护链表的排序属性。此函数通过查找合适位置,然后创建新节点并调整指针,将新元素按升序插入链表中。 #### (4) 打印元素 `Print` 用于格式化输出链表中单个元素的信息,包括学生的...

    C#线性表相加减

    在这个项目中,可能使用了适合链表的排序算法,比如链表版本的快速排序。 4. **多项式相加**:两个多项式相加,只需要对应指数的项相加,如果一个多项式中没有某个指数,则另一多项式的相应项直接添加到结果中。在...

    c++程序设计第一章函数编程题.pdf

    `display`函数用于输出链表中的所有工作记录,但在这个例子中并未实现完整的功能,因为它缺少处理冲突的逻辑。完整的`display`函数应该检查当前节点是否与其他节点有冲突(即其开始时间在其他节点的开始时间和结束...

    图书管理系统C语言实现源代码.pdf

    1. **建立链表**:`chu_jian()` 函数用于创建一个空的链表,结构体 `book` 中包含图书的各种属性以及指向下一个节点的指针,形成链表结构。 2. **从文件中读取图书信息**:`load()` 函数从外部文件中读取图书数据,...

Global site tag (gtag.js) - Google Analytics