[数据结构]线性表1 C++编程作业

链表三插法详解:

链表的三种插入方法(头插法,尾插法,任意位置插入)_链表插入_夜路难行々的博客-CSDN博客

1·使用头插法创建链表

cpp 复制代码
#include <iostream>
using namespace std;

typedef struct Lnode{
    int data;
    struct Lnode *next;
}LNode,*LinkList;

void PrintList(LinkList &L)
{
    LinkList p=L->next;
    while(p){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
void CreateList_F(LinkList &L,int n){ 
      L=new LNode; 
      L->next=NULL; //先建立一个带头结点的单链表 
      for(int i=0;i<n;i++){ 
        LNode *p=new LNode; //生成新结点 
        cin>>p->data; //输入元素值 
        p->next=L->next;L->next=p; 	//插入到表头 
     } 
}
int main()
{
    int n;
    cin >> n;
    LinkList L;
    CreateList_F(L,n);
    PrintList(L);
}

2·使用尾插法创建链表

cpp 复制代码
#include <iostream>
using namespace std;

typedef struct Lnode{
    int data;
    struct Lnode *next;
}LNode,*LinkList;

void PrintList(LinkList &L)
{
    LinkList p=L->next;
    while(p){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}

void CreateList_L(LinkList &L,int n){ 
      L=new LNode; 
      L->next=NULL; 	
      LinkList r=L; 	                                //尾指针r指向头结点 
      for(int i=0;i<n;++i){ 
        LNode *p=new LNode;            //生成新结点 
        cin>>p->data;   		       //输入元素值 
        p->next=NULL; r->next=p;       //插入到表尾 
        r=p; 	                                  //r指向新的尾结点 
      } 
}
int main()
{
    int n;
    cin >> n;
    LinkList L;
    CreateList_L(L,n);
    PrintList(L);
}

3·使用尾插法创建链表并实现删除指定元素

cpp 复制代码
#include <iostream>
using namespace std;

typedef struct Lnode{
    int data;
    struct Lnode *next;
}LNode,*LinkList;

void PrintList(LinkList &L)
{
    LinkList p=L->next;
    while(p){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}

void CreateList_L(LinkList &L,int n){ 
      //正位序输入n个元素的值,建立带表头结点的单链表L 
      L=new LNode; 
      L->next=NULL; 	
      LinkList r=L; 	                                //尾指针r指向头结点 
      for(int i=0;i<n;++i){ 
        LNode *p=new LNode;            //生成新结点 
        cin>>p->data;   		       //输入元素值 
        p->next=NULL; r->next=p;       //插入到表尾 
        r=p; 	                                  //r指向新的尾结点 
      } 
}//CreateList_L

 bool ListDelete(LinkList &L,int e){
    LinkList p=L->next;
    LinkList q=L;

    while(p && p->data!=e){                 
        q=p;
        p=p->next;
        
    } 
    if(!p) return false; //没找到被删除元素 

    q->next=p->next; 	                  
    delete p;
    return true; 
}//ListDelete
int main()
{
    int n;
    cin >> n;
    LinkList L;
    CreateList_L(L,n);
    int e;
    cin >> e;
    ListDelete(L,e);
    PrintList(L);
  
    return 0;
}

4·合并两个有序链表

cpp 复制代码
#include <iostream>
using namespace std;

typedef struct Lnode{
    int data;
    struct Lnode *next;
}LNode,*LinkList;

void PrintList(LinkList &L)
{
    LinkList p=L->next;
    while(p){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}

void CreateList_L(LinkList &L,int n){ 
      //正位序输入n个元素的值,建立带表头结点的单链表L 
      L=new LNode; 
      L->next=NULL; 	
      LinkList r=L; 	                                //尾指针r指向头结点 
      for(int i=0;i<n;++i){ 
        LNode *p=new LNode;            //生成新结点 
        cin>>p->data;   		       //输入元素值 
        p->next=NULL; r->next=p;       //插入到表尾 
        r=p; 	                                  //r指向新的尾结点 
      } 
}//CreateList_L
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){
   LinkList pa=La->next;  
   LinkList pb=Lb->next;
   LinkList pc=Lc=La;                    //用La的头结点作为Lc的头结点 
   while(pa && pb){
      if(pa->data<=pb->data)
        { pc->next=pa;pc=pa;pa=pa->next;}
      else
        {pc->next=pb; pc=pb; pb=pb->next;}
   }
   pc->next=pa?pa:pb;      //插入剩余段  
   delete Lb;                     //释放Lb的头结点}  
}
int main()
{
    int n;
    cin >> n;
    LinkList La;
    CreateList_L(La,n);

    int m;
    cin >> m;
    LinkList Lb;
    CreateList_L(Lb,m);


    LinkList Lc;
    MergeList_L(La,Lb,Lc);
    PrintList(Lc);
    return 0;
}
相关推荐
papership33 分钟前
【入门级-算法-6、排序算法: 插入排序】
数据结构·算法·排序算法
HAH-HAH43 分钟前
【蓝桥杯 2024 国 Java A】粉刷匠小蓝
c++·学习·数学·算法·职场和发展·蓝桥杯·组合数学
得意霄尽欢1 小时前
Redis之底层数据结构
数据结构·数据库·redis
I'm a winner1 小时前
第五章:Python 数据结构:列表、元组与字典(二)
数据结构·python
我是是是是是西红柿1 小时前
游戏中的展销系统使用的数据结构
数据结构·游戏
小吴同学·1 小时前
OPC Client第10讲:实现主界面;获取初始界面传来的所有配置信息config【C++读写Excel:xlnx;ODBC;缓冲区】
c++·wxwidgets
边疆.2 小时前
【C++】继承详解
开发语言·c++·继承
hweiyu002 小时前
C++设计模式,高级开发,算法原理实战,系统设计与实战(视频教程)
c++·算法·设计模式
爱吃烤鸡翅的酸菜鱼2 小时前
【Redis】常用数据结构之Hash篇:从常用命令到使用场景详解
数据结构·数据库·redis·后端·缓存·哈希算法
大千AI助手2 小时前
粒子群优化(PSO)算法详解:从鸟群行为到强大优化工具
人工智能·算法·优化算法·pso·粒子群优化