链表的创建,插入,删除,输出

本文介绍使用C语言实现单链表的基本操作,包括创建、插入、删除等核心功能,并提供完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我用的是头插法

#include<stdio.h>

#include<malloc.h>

#define TURE 1
#define FLASE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;
typedef int ElemType;

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode, *LinkList ;


//创建链表
void BuildList_L(LinkList &L, int n)
{
    LinkList p;
    L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;
    printf("请输入元素值:");
    for (int i = 0 ; i < n; i++ )
    {
        p = (LinkList)malloc(sizeof(LNode));
        scanf_s("%d", &p->data); //输入元素值
        p->next = L->next;
        L->next = p; //插入到表头
    }
}

Status ListInsert_L(LinkList &L, int i, ElemType e)
{
    //在i的带头节点的单链线性表L中的第i个位置之前插入元素e
    LinkList p;
    LinkList s;
    p = L;
    int j = 0;
    while (p && j < i - 1)  //寻找i-1个节点
    {
        p = p->next;
        ++j;
    }
    if (!p || j > i - 1)
        return ERROR;  //i小于1或者大于表长加1
    s = (LinkList)malloc(sizeof(LNode));  //生成新节点
    s->data = e;    //插入L中
    s->next = p->next;
    p->next = s;
    return OK;
}

//链表的删除
Status ListDelete_L(LinkList &L, int i, ElemType &e)
{
    //在带头结点的单链线性表L中,删除第i个元素的,并由e返回其值
    LinkList p;
    LinkList q;
    p = L;
    int j = 0;
    while (p->next && j < i - 1)
    {
        p = p->next;
        ++j;
    }
    if (!(p->next) || j > i - 1)
        return ERROR;    //删除节点不合理
    //删除并释放节点
    q = p->next;
    p->next = q->next;
    e = q->data;
    free(q);
    return OK;
}
void PrintfList(LinkList &L)
{
    LinkList p ;
    p = L->next ;
    if (p == NULL)
        printf_s("该链表为空\n");
    else
    {
        
        while (p)
        {
            printf_s("%d ", p->data);
            p = p->next ;
        }
    
    }
}

void main()
{
    LinkList l;
    int a = 0; //a为链表长度
    printf_s("请输入所要创建的链表元素的个数:");
    scanf_s("%d", &a);
    BuildList_L( l , a );
    printf_s("输出现在的链表:");
    PrintfList( l );
    printf_s("\n");
    int x = 0, y = 0;  //x代表所要插入元素的位置,y为所要插入元素的值
    printf_s("输入要 插入的元素的位置及元素的值:");
    scanf_s("%d%d", &x , &y );
    ListInsert_L( l , x , y );
    printf_s("输出现在的链表:");
    PrintfList( l );    
    printf_s("\n");
    int m = 0, n = 0;   //m代表所要删除元素的位置,n代表所要删除的元素的值
    printf_s("输入要删除的元素的位置及元素值:");
    scanf_s("%d%d", &m, &n);
    ListDelete_L( l , m , n );
    printf_s("输出现在的链表:");
    PrintfList( l );
    printf_s("\n");
}
智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值