2116-数据结构实验之链表一:顺序建立链表 SDUT C语言

在这里插入图片描述
注:最后输出的数据后有空格

#include <stdio.h>
#include <stdlib.h>
struct node
{
    int data;
    struct node *next;
};
int main()
{
    int n,i;
    scanf("%d",&n);
    struct node *head,*p,*tail;
    head=(struct node*)malloc(sizeof(struct node));
    head->next=NULL;
    tail=head;
    for(i=0;i<n;i++)
    {
        p=(struct node*)malloc(sizeof(struct node));
        scanf("%d",&p->data);
        p->next=NULL;
        tail->next=p;
        tail=p;
    }
    p=head->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    return 0;
}

好的,让我们起来了解下如何通过 C 语言实现按顺序建立链表并遍历输出这些数据的功能。 ## 题目解析 ### 输入说明 你需要从标准输入读取两行内容: -行是个正整数 N (1 ≤ N ≤ 100),表示将要输入的数据的数量; - 接下来的第二行包含 N 个空格分隔的整数 a[i] (-10^9 <= a[i] <= 10^9) ,即你要插入到链表中的元素值。 ### 输出说明 程序需要依次打印出所有节点的内容,每个数字占行。 ### 示例代码框架 下面给出了段完整的示例代码用于解决问题。该例子展示了如何创建、初始化以及最终释放个简单的单向链表结构体,同时实现了添加新结点的操作及完整输出列表的功能。 ```c #include <stdio.h> #include <stdlib.h> // 定义节点结构 typedef struct ListNode { int val; struct ListNode *next; } ListNode; // 创建新的节点函数 ListNode* createNode(int value){ // 分配内存给个新的节点空间 ListNode* newNode = (ListNode *)malloc(sizeof(ListNode)); if (!newNode) return NULL; // 检查分配是否成功 // 初始化这个新建出来的节点成员变量 newNode->val = value; newNode->next = NULL; return newNode; } int main() { int n, data; scanf("%d", &n); // 获取有多少个元素 ListNode *head = NULL,*tail=NULL; for (int i=0;i<n;++i){ scanf("%d",&data); ListNode* node=createNode(data); if(!head){ // 如果头指针为空,则表明这是第个节点 head=node; tail=head; } else{ tail->next=node; // 将当前最后个节点指向新增加进来的那个node节点 tail=node; // 更新尾巴为最新加入的那个节点 } } // 打印所有的节点信息 ListNode* current = head; while(current != NULL){ printf("%d\n",current->val ); current=current -> next ; } // 清理资源 - 释放所有动态申请过的节点的空间 current = head; while(current !=NULL ){ ListNode *temp=current ; current=current->next ; free(temp ); } } ``` 此片段中我们首先定义了个 `struct` 来保存每链表节点的信息;然后利用了两个辅助性的全局变量 (`head`, `tail`) 去帮助构造整个链条,并保证每次插入操作都是线性复杂度 O(1) 的时间开销。最后记得对已使用的堆区进行适当清理以避免潜在的内存泄漏问题! 如果你有任何疑问或者想了解更多关于这个问题的知识,请参考以下相关的问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值