首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

单链表创建函数C

是一个用于创建单链表的函数。单链表是一种常见的数据结构,由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。

在创建单链表时,需要定义一个头节点,并将其指针指向NULL,表示链表为空。然后,逐个添加节点到链表中,直到达到所需的节点数量或者输入结束。

以下是一个示例的单链表创建函数C的实现:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

// 定义单链表节点结构
typedef struct Node {
    int data;           // 数据元素
    struct Node* next;  // 指向下一个节点的指针
} Node;

// 创建单链表函数
Node* createLinkedList(int n) {
    Node* head = NULL;  // 头节点指针
    Node* temp = NULL;  // 临时节点指针

    // 创建头节点
    head = (Node*)malloc(sizeof(Node));
    if (head == NULL) {
        printf("内存分配失败!\n");
        return NULL;
    }

    // 输入第一个节点的数据
    printf("请输入第1个节点的数据:");
    scanf("%d", &(head->data));
    head->next = NULL;

    // 创建剩余节点
    for (int i = 2; i <= n; i++) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        if (newNode == NULL) {
            printf("内存分配失败!\n");
            return NULL;
        }

        // 输入节点数据
        printf("请输入第%d个节点的数据:", i);
        scanf("%d", &(newNode->data));
        newNode->next = NULL;

        // 将新节点连接到链表尾部
        temp = head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
    }

    return head;
}

// 打印单链表函数
void printLinkedList(Node* head) {
    Node* temp = head;

    printf("单链表的数据元素为:");
    while (temp != NULL) {
        printf("%d ", temp->data);
        temp = temp->next;
    }
    printf("\n");
}

int main() {
    int n;
    Node* head;

    printf("请输入单链表的节点数量:");
    scanf("%d", &n);

    head = createLinkedList(n);
    printLinkedList(head);

    return 0;
}

该示例中,首先定义了一个单链表节点结构体Node,包含数据元素data和指向下一个节点的指针next。然后,通过createLinkedList函数创建单链表,该函数接受一个参数n表示节点数量。在函数内部,首先创建头节点,并输入第一个节点的数据。然后,使用循环创建剩余节点,并将它们连接到链表尾部。最后,返回头节点指针。printLinkedList函数用于打印单链表的所有数据元素。

这是一个简单的单链表创建函数C的实现,可以根据实际需求进行修改和扩展。腾讯云提供了多种云计算相关产品,如云服务器、云数据库、云存储等,可以根据具体场景选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 链表 C++

    链表 C++ 题目 1、创建链表 2、初始化链表 3、释放链表 4、获取链表中元素的数量 5、输出链表中的所有数据 6、获取链表中指定位置的元素 7、根据键值查找指定元素 8、采用头插法向链表中插入一个元素...9、采用尾插法向链表中插入一个元素 10、向链表中的指定位置插入一个元素 11、删除指定位置的元素 设计类图 [3333.png] 文件结构 [1%20-%20%E5%89%AF%E6%9C%AC.png...:~list() { this->destroyList(); } /*创建链表*/ int list::createList() { Node* head = new Node(); // 创建头节点...#include "store.h" // method.h 链表 // 0 号节点为头节点 1号节点开始存储内容 class list { public: list(); // 构造函数 ~...// 创建链表 int destroyList(); // 释放线性表 }; 单元测试 // ConsoleApplication3.cpp : 此文件包含 "main" 函数

    1.1K20

    c语言链表详解

    前言:     上一期一起学习了数据结构初阶的顺序表,发现顺序表有一些致命的缺点,比如部分操作时间复杂度高,还是会存在空间浪费的现象,今天为大家介绍的链表就可以完美地解决这个问题。...文件分类:     还是和顺序表一样创建3个文件: Seqlist.h: 头文件,放入结构体和函数的声明。 Seqlist.c函数接口文件,用来存放函数的定义。...test.c: 测试文件,在写代码过程中用来测试函数的可行性。...链表概述及声明:     顾名思义,链表就是将各个节点像链子一样连起来,每个节点只放一个数据,这样就完美解决了空间浪费地问题,具体地声明如下: 这样我们地数据就像下图一样被连接了起来: 下面就为大家介绍如何在这个链表中进行操作...: 创建节点函数:     如果要对这个链表进行添加数据,必定需要开辟一个空间创造一个节点,所以就需要这么一个函数来实现,代码如下: SLNode* CreatNew(SListDatetype x)/

    10610

    C语言创建链表

    一、链表中结点的存储        链表的结点左边一部分是存放的数据,右边一部分是后继指针指向下一个结点的地址。...C语言中通常定义一个结构体类型来存储一个结点,如下: struct node { int data; struce node *next; //下一个结点的类型也是struct node...,方便从头遍历整个链表)、p(临时指针,指向那些还未连接的结点)、q(当前指针,指向当前最新串入的结点)。   ...当链表还没有建立时,头指针head为空。 struct node *head; head=NULL; //头指针初始为空   现在我们来创建第一个结点,并用临时指针p指向这个结点。...如果该结点是创建的第一个结点,则将头指针指向这个结点再将当前指针指向这个结点;如果该结点不是第一个,则将上一个结点的后继指针指向该结点再修改当前指针指向这个新结点。

    1.7K20

    链表链表-增-删-查(C语言)

    free(*pphead); //这时候第一个数据就是之前第二个数据了 *pphead = ppheadNext; } 查找 下面的删除和插入都要在先在链表中找到为前提。...在指定位置前插入某个数据 void SLTInsert(SLTNode** pphead,SLTNode* pos, SLTDataType x) { //如果在第一个结点前插入数据 //那就是头插,直接调用头插的函数...SLTNode*pos) { //当删除第一个结点的时候,无法找到他的前一个结点 if (pos == *pphead) { SLTPopFront(pphead); } else { //链表每次老是要寻找前一个结点...前插入某个数据 void SLTInsert(SLTNode** pphead,SLTNode* pos, SLTDataType x) { //如果在第一个结点前插入数据 //那就是头插,直接调用头插的函数...SLTNode*pos) { //当删除第一个结点的时候,无法找到他的前一个结点 if (pos == *pphead) { SLTPopFront(pphead); } else { //链表每次老是要寻找前一个结点

    70920

    C语言手撕链表

    链表,顾名思义就是单向链接的链表,效果如同下图 前言: 在讲解链表的各个接口前,很有必要讲解以下单链表的物理内存到底是如何存储的,先掌握这个,接下来的讲解就会更容易理解 头结点指向的地址就是第一个结点的总地址...phead, SLTDataType x); void SLTPopFront(SLTNode** phead); void SLTPopBack(SLTNode** phead);  1、遍历链表打印函数...一般需要创建一个临时变量去接收头结点 //遍历链表肯定需要头结点 void SLTPrint(SLTNode* phead) { SLTNode* cur = phead;//一般需要临时创建变量...= NULL) { printf("%d->", cur->data); cur = cur->next; } printf("NULL"); } 2、创建链表函数 SLTNode* BuySListNode...,需要assert断言检查 第二种链表中只有一个结点,需要改变结构体指针,因此函数传参也是需要二级指针 第三种链表有多于一个的结点,需要先找到尾结点。

    6110

    DS链表--合并 C++

    题目描述 假定两个链表是递增有序,定义并实现以下函数,完成两个链表的合并,继续保持递增有序 int LL_merge(ListNode *La, ListNode *Lb) 输入 第1行先输入n表示有...n个数据,接着输入n个数据 第2行先输入m表示有M个数据,接着输入m个数据 输出 输出合并后的链表数据,数据之间用空格隔开 输入样例1 3 11 33 55 4 22 44 66 88 输出样例1...11 22 33 44 55 66 88  思路分析 这个函数的返回值是int型,我们一般创建一个新链表来作为这两个链表的合并比把一个链表并入另一个链表的操作简单。...于是把这个写成链表的成员函数,首先记录下两个链表的开始节点,然后循环遍历两个链表,比较两个链表节点中数据的大小把小的插入新链表,直到两个链表中有一个遍历完跳出循环,之后把没遍历完的链表的剩下元素全部插入新链表尾部...,位置从0到n,0是头结点,1是首结点,n是尾结点 public: ListNode * head; //头结点 int size; //表长 LinkList(); //构造函数创建头结点

    28430

    c语言 | 链表的实现

    今天分享的是链表。准确的说,链表不算是C语言中的内容,而是属于数据结构的内容,因为它没有新的知识点,只是利用了结构体和指针等的知识。...但是它在C语言中应用还是很广泛的,在RTOS中,也是非常多的地方使用到了链表。今天暂时说一下链表的实现和简单应用,下一节当中再介绍双链表。 首先,要对链表有个概念。...链表其实是对数组的扩展,数组是为了存储很多个数据而产生的,但是它有两个缺陷,第一个缺陷就是数组里面所有的元素都是同样的类型,为了解决这个问题,产生了结构体。...创建节点的时候,先用malloc函数申请一段堆内存,堆内存的大小就是一个节点的大小,将这段内存强制类型转化为结构体指针类型。然后将堆内存清零,因为堆内存与栈一样,都是“脏的”,使用前必须进行初始化。...在这个函数当中,有三个参数,第一个是头指针,用来定位链表,第二个是用户待删除的数据,第三个是选项,用来选择是删除一个还是删除所有。

    2.1K30

    C语言实现链表

    文章目录 链表常规操作 定义链表结构体 构造链表 头插法实现 尾插法实现 链表的头尾插法详解 链表判空 计算链表长度 遍历链表 链表头、尾插法构造效果 链表指定位置插入结点 链表指定位置删除结点...(); // 头插法创建链表 LinkList CreateHeadListT(); // 尾插法创建链表 int ListEmpty(); // 链表判空 int ListLength...) }*LinkList, Node; 构造链表 头插法实现 /* * 头插法创建链表(带头结点) * datas 接收数组,用于赋值链表的结点数据 * len datas数组的长度,便于遍历...尾插法实现 /* * 尾插法创建链表(带头结点) * datas 接收数组,用于赋值链表的结点数据 * len datas数组的长度,便于遍历 */ LinkList CreateHeadListT...():5 Travel():2 4 8 6 12 源代码 源代码已上传到 GitHub Data-Structure-of-C,欢迎大家下载 C语言实现数据结构

    1.9K41

    C++练手】C++实现链表

    前几天找实习的时候,一个面试官给我留了一个题,做一个链表demo,要求实现创建、插入、删除等操作。...链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 我是用C++代码来写的。...Node { Info val; Node *next; Node(Info x):val(x),next(NULL) {} }; class LinkList { public: //构造函数...); //打印链表 void Print(); //析构函数 ~LinkList(); private: Node *head; int length; }; 然后,定义一个linklist.cpp...其实用C++实现链表的功能,基本上就是用来练手用,在C++的模版里面已经有很多实现了,作为练手的小练习还是挺有意思的。勤快的小伙伴可以对着代码调试起来,加强自己基本功的练习。

    1.3K70

    数据结构_链表C++

    数据结构_SinglyLinkedList链表C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。...[toc] 前言&注意事项 链表C++的实现分为了结点类和链表类两个类,十分明了,可读性很高,也很容易写,节点类负责单个节点的操作,链表负责链表整体的操作 ==assert果然还是太暴力了,能不用就不用吧...void sListClear(); //清空链表,保留head结点,释放其余空间 ~sList(); //析构函数,销毁链表,释放所有空间 };SList.cpp 包含头文件以及构造函数的定义...题目 ==下面这些函数都是直接在上面写好的链表头文件(sList.h)中作为了成员函数声明的,并在另一个文件中定义的== 当然也可以不用作为成员函数,而是重新写一个头文件和源文件,并在头文件中包含链表的源文件来使用写好的链表...但是因为题目大都是在现有链表的基础上进行操作,也就是对链表进行操作,不如直接写成链表的成员函数,直接在链表中调用更方便 1.求两个递增链表的交、并、差集,并且要求结果也是递增的链表 请用两种方案实现

    96930
    领券