带头节点单链表操作

简介: #include #include #include using namespace std;typedef long long LL;typedef struct Node{ ...
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef long long LL;
typedef struct Node{
    int data;
    struct Node *next;
}*List;
//头插法建立长为n的链表
void FrontCreateList(List &L,int n){
    List p;
    L=(Node*)malloc(sizeof(Node));
    L->next=NULL;
    for(int i=0;i<n;i++){
        p=(Node*)malloc(sizeof(Node));
        cin>>p->data;
        p->next=L->next;
        L->next=p;
    }
}
//尾插法建立长为n的链表
void EndCreateList(List &L,int n){
    List p,q;
    L=(Node*)malloc(sizeof(Node));
    L->next=NULL;
    for(int i=0;i<n;i++){
        p=(Node*)malloc(sizeof(Node));
        cin>>p->data;
        p->next=NULL;
        if(L->next==NULL)
            L->next=p;
        else
            q->next=p;
        q=p;
    }
}
//销毁链表
void Destroy(List &L){
    List p;
    while(L){
        p=L->next;
        free(L);
        L=p;
    }
    cout<<"OK"<<endl;
}
//清空链表
void Clear(List L){
    List p=L->next;
    L->next=NULL;
    Destroy(p);
}
//判断链表是否为空
bool IsEmpty(List L){
    if(L->next==NULL)
        return 1;
    else
        return 0;
}
//返回链表的长度
int Length(List L){
    int j=0;
    List p=L->next;
    while(p){
        j++;
        p=p->next;
    }
    return j;
}
//查找值是否存在
int GetData(List L,int i,int *e){
    int j=0;
    List p=L->next;
    while(p&&j<i){
        j++;
        p=p->next;
    }
    if(!p||i<1)
        return false;
    *e=p->data;
    return true;
}
//得到值的位置
int LocateData(List L,int e){
    int j=0;
    List p=L->next;
    while(p){
        j++;
        if(p->data==e)
            return j;
        p=p->next;
    }
    return false;
}
//在第i的位置插入e
void Insert(List L,int i,int e){
    int j=0;
    List p=L,q,s;
    while(p&&j<i-1){
        j++;
        p=p->next;
    }
    if(!p||i<1)
        exit(0);
    q=p->next;
    s=(Node *)malloc(sizeof(Node));
    if(!s)
        exit(-1);
    s->data=e;
    s->next=q;
    p->next=s;
}
//删除第i位置的节点,并用e返回
void Delete(List L,int i,int *e){
    int j=0;
    List p=L,q;
    while(p&&j<i-1){
        j++;
        p=p->next;
    }
    if(!p||i<1)
        exit(-1);
    q=p->next;
    *e=q->data;
    p->next=q->next;
    free(q);
}
//从头遍历链表
void Travel(List L){
    List p=L->next;
    while(p){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
//测试
int main(){
    int n;
    cin>>n;
    List L;
    EndCreateList(L,n);
    Travel(L);
    cout<<Length(L)<<endl<<endl;


    int out,i;
    cin>>i;
    Delete(L,i,&out);
    cout<<out<<endl;
    Travel(L);
    cout<<Length(L)<<endl<<endl;


    int j,put;
    cin>>j>>put;
    Insert(L,j,put);
    Travel(L);
    cout<<Length(L)<<endl<<endl;

    int sear;
    cin>>sear;
    cout<<LocateData(L,sear)<<endl<<endl;

    cout<<IsEmpty(L)<<endl;
    Destroy(L);
    return 0;
}
目录
相关文章
|
数据库 C++
VS 错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
VS 错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
1367 0
VS 错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
|
4月前
|
人工智能 自然语言处理 语音技术
企业级AI数字员工技术选型指南:玄晶引擎全链路架构 vs 垂类AI工具的核心差异
企业数字化转型中,AI数字员工正从单一工具迈向全链路协同。玄晶引擎以多模态大模型、RPA流程引擎与数据中台为核心,构建覆盖招聘、销售、私域等全环节的智能体系,打破垂类AI工具的数据孤岛,实现技术融合、数据闭环与系统主动兼容,助力企业降本增效。开发者应聚焦架构开放性、数据完整性与落地轻量化,选型具备全链路协同能力的企业级AI解决方案。
272 1
|
4月前
|
人工智能 自然语言处理 安全
推荐一款好用的智能客服系统(2025年12月更新)
在数字经济时代,智能客服已成为企业降本增效的核心工具。本文对比瓴羊Quick Service、合力亿捷云客服、Intercom等主流系统,从场景适配、AI能力、部署模式、安全合规等维度深入分析,结合企业实际需求提供选型建议,助力实现服务数字化转型与客户体验升级。(238字)
|
8月前
|
Java
Java标识符详解
本内容详解Java标识符的定义、命名规则与最佳实践,涵盖合法字符、命名规范、常见错误及Unicode支持,助你写出更规范、易读的Java代码。
604 2
|
9月前
|
机器学习/深度学习 人工智能 边缘计算
AI 视觉识别技术在工业园智能安监中的应用实践
本文详解AI安监系统的技术架构、核心算法与工程化方案,展示其如何通过计算机视觉实现全场景风险主动防控。
514 0
|
10月前
|
设计模式 算法 Java
2025 春季校招 Java 研发笔试题详细解析及高效学习指南
本指南专为2025春季校招Java研发岗位笔试设计,涵盖Java 17+新特性(如模式匹配、文本块、记录类和密封类)、现代技术栈(Spring Boot 3、响应式编程、Stream API增强)以及算法与数据结构实战。同时深入解析Spring Data JPA、事务管理、性能优化等内容,并结合实际案例讲解常见算法题解与设计模式应用。资源包含核心知识点、面试题及笔试技巧,助力高效备考。下载地址:[链接](https://pan.quark.cn/s/14fcf913bae6)。
215 1
|
Kubernetes 关系型数据库 MySQL
k8s快速部署MySQL单机
k8s快速部署MySQL单机
|
自然语言处理 安全 程序员
程序员推荐的12款实用模板免费的WordPress主题
本文介绍了12款实用的免费WordPress主题,包括Sydney、PopularFX、Zakra等,涵盖企业、博客、美食等多种风格。这些主题功能丰富,如自定义布局、预制模板、AMP兼容等,适合不同需求的用户。每款主题均有精美预览图展示,建议收藏以备后续使用。更多主题可访问ztmao.com。
676 2
程序员推荐的12款实用模板免费的WordPress主题
|
机器学习/深度学习 自然语言处理 C++
《深度LSTM vs 普通LSTM:训练与效果的深度剖析》
长短期记忆网络(LSTM)擅长处理序列数据,而深度LSTM作为其扩展形式,在训练和效果上存在显著差异。深度LSTM通过增加层数增强了特征提取能力,尤其在处理复杂任务如图像描述、机器翻译时表现更优。然而,其计算量大、训练时间长、优化难度高,并且容易过拟合。相比之下,普通LSTM结构简单,适合处理短期依赖关系及数据量较少的任务。选择模型时需根据具体需求权衡。
521 11
|
运维 监控 安全
提升运维效率的五大策略
本文将通过分析五个关键策略,探讨如何在运维工作中实现效率的提升。这些策略包括自动化工具的应用、持续集成与持续部署(CI/CD)的实践、有效的监控和日志管理、优化的文档和知识共享以及定期的安全审计。每个策略都提供了具体实施建议和预期效果,帮助运维团队在快节奏的技术环境中保持高效运作。
1358 1

热门文章

最新文章

下一篇
开通oss服务