【数据结构】单链表的一些实用操作

本文介绍了单链表的基本操作,包括构建、初始化、打印、按顺序插入、逆置、归并、删除相同值节点及搜索相同值节点等,并提供了详细的C语言实现代码。

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

   本人为数据结构初学者,以下是在学习中总结的一些关于单链表的操作。希望大家多多指教。
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct tagLNODE{
    ElemType data;
    struct tagLNODE *next;
}LNODE,*LinkList;         //设计结点
void CreateLinkR(LinkList *L,int n)        //构建单链表
{
 LinkList p,s;
 p=*L=(LinkList)malloc(sizeof(LNODE));
 for(;n>0;n--){
  s=(LinkList)malloc(sizeof(LNODE));
  scanf("%d",&s->data);
  p->next=s,p=s;
 }
 p->next=NULL;
}
void InitList(LinkList *L)          //初始化链表
{
 *L=(LinkList)malloc(sizeof(LNODE));
 
       (*L)->next=NULL;
}
void DisplayLink(LinkList L)           //打印单链表
{
 LinkList p=L->next;
 while(p!=NULL){
  printf("%d ",p->data);
  p=p->next;
 }
}
void insert_order(LinkList L,int x)//按从小到大的顺序插入链表
{
    LinkList p,q;
    p=L;
    while(p->next!=NULL&&p->next->data<x)
  p=p->next;
 q=(LinkList)malloc(sizeof(LNODE));
 q->data=x;
 q->next=p->next;
 p->next=q;
}
void reverse(LinkList L)  //链表的逆置
{
 LinkList p,q;
 p=L->next;
 L->next=NULL;
 while(p)
 {
  q=p;
  p=p->next;
  q->next=L->next;
  L->next=q;
 }
}
void Merge_Link(LinkList L1,LinkList L2,LinkList L3)  //两个有序表按顺序归并
{
 LinkList p1,p2,p3;
 p1=L1->next,p2=L2->next;
 p3=L3;
 while(p1&&p2){
  if(p1->data<=p2->data){
   p3->next=p1;p3=p1;p1=p1->next;
  }
  else{p3->next=p2;p3=p2;p2=p2->next;}
 }
 p3->next=p1?p1:p2;
    free(L2);
}
void deleteNode(LinkList L1,LinkList L2) //删除两个链表(L1)中相同值的节点
{
 LinkList p1,p2,q;
 p1=L1;
 p2=L2;
 while((p2->next)!=NULL){
  while((p1->next)!=NULL){
   if((p1->next)->data==(p2->next)->data){
    q=p1->next;
    p1->next=q->next;
    free(q);
    p1=p1->next;
   }
   else {p1=p1->next;}
  }
  p1=L1;
  p2=p2->next;
 }
}
void search_same(LinkList L1,LinkList L2,LinkList L3) //输出两个链表中相同值的节点
{
 LinkList p1,p2,p3;
 p1=L1->next;
 p2=L2->next;
 p3=L3;
 while(p1&&p2){
  if(p1->data<p2->data) p1=p1->next;
  else if(p1->data>p2->data) p2=p2->next;
  else{insert_order(L3,p1->data);p1=p1->next;p2=p2->next;}
 }
}
内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值