#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
 ElemType data;
 struct LNode *next;
}LNode,*LinkList;
void CreatList(LinkList &L) //尾插入法
{
 LinkList p,q;
 int i,n;
 printf("请输入数据的个数\n");
 scanf("%d",&n);
 L=(LinkList)malloc(sizeof(LNode));
 L->next=NULL;
 q=L;
 printf("请输入%d个数据\n",n);
 for(i=0;i<n;i++)
 {
  p=(LinkList)malloc(sizeof(LNode));
  scanf("%d",&p->data);
  q->next=p;
  q=q->next;
 }
 p->next=NULL;
}
void CreatList2(LinkList &L) //头插入法
{
 LinkList p,q;
 int i,n;
 printf("请输入数据的个数\n");
 scanf("%d",&n);
 L=(LinkList)malloc(sizeof(LNode));
 L->next=NULL;
 q=L;
 printf("请输入%d个数据\n",n);
 for(i=0;i<n;i++)
 {
  p=(LinkList)malloc(sizeof(LNode));
  scanf("%d",&p->data);
  p->next=q->next;
  q->next=p;
 } 
 }
void PrintList(LinkList &L) //链表输出
{
 LinkList p;
 p=L->next;
 printf("链表中的数据为\n");
 while(p)
 {
  printf("%d\t",p->data);
  p=p->next;
 }
  }
int ListLength(LinkList L)
{
 LinkList p;
 int n=0;
 p=L->next;
 while(p)
 {
  n++;
  p=p->next;
 }
 return n;
}
Status ListInsert(LinkList L,int n,ElemType e) //元素插入
{
 int i;
 LinkList p,q;
 p=(LinkList)malloc(sizeof(LNode));
 p->data=e;
 q=L;
 for(i=0;i<n-1;i++)
 {
  q=q->next;
 }
 p->next=q->next;
 q->next=p;
 return OK;
}
Status DeletList(LinkList L,int n,ElemType &e) //元素删除
{
 int i;
 LinkList p,q;
 q=p=L;
 for(i=0;i<n-1;i++)
 {
  p=p->next;
  q=q->next;
 }
 q=q->next;
 e=q->data;
 p->next=q->next;
}
Status SortList(LinkList &L) //交换结点
{
    LinkList r,q,p,end,temp;
    end=NULL;
    while(L -> next != end)
    {
     r=L;
  q=r->next;
  p=q->next;
        while(p!=end)
        {
            if(q->data>p->data)
            {
                q -> next = p -> next;
                r -> next = p;
                p -> next = q;
                temp = p;
                p = q;
                q = temp;
            }
            r=r->next;
   q=q->next;
   p=p->next;
        }
        end =q;
    }
    return OK;
}
Status SortList2(LinkList &L) //交换数据
{
 LinkList p,q,end;
 int t,n=0,i,j;
 end=NULL;
 p=L->next;
 q=p->next;
 while(L->next!=end)
 {
  p=L->next;
     q=p->next;
    while(q!=end)
    {
      if(p->data>q->data)
      {
       t=p->data;
       p->data=q->data;
       q->data=t;
  }
  p=p->next;
  q=q->next;
    }
    end=p;
   }
 return OK;
 }
 
  void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) //合并链表
 { 
  LinkList r,q,p;
  q=La->next;
  p=Lb->next;
  r=Lc=La;
  while(q!=NULL&&p!=NULL)
  {
   if(q->data<p->data)
   {
    r->next=q;
    r=r->next;
    q=q->next;
   }
   else
   {
    r->next=p;
    r=r->next;
    p=p->next;
   }
 }
 if(q!=NULL)
  r->next=q;
  else
  r->next=p;
 }
int main()
{
 int  n;
 ElemType e;
 LinkList La,Lb,Lc;
 printf("创建链表La\n");
 CreatList(La);
 PrintList(La);
 n=ListLength(La);
 printf("\n该链表的长度为 %d\n",n);
 printf("请输入需要插入的位置和数据\n");
 scanf("%d %d",&n,&e);
 ListInsert(La,n,e);
 PrintList(La);
 printf("\n请输入需要删除数据的位置\n");
 scanf("%d",&n);
 DeletList(La,n,e);
 PrintList(La);
 printf("\n被删除的数据为 ");
 printf("\n%d\n",e);
 if(SortList(La)!=1)
 printf("排序错误");
 printf("排序后\n");
 PrintList(La);
    printf("\n创建链表Lb");
 CreatList(Lb);
 if(SortList(Lb)!=1)
 printf("排序错误");
 printf("排序后\n");
 PrintList(Lb);
 MergeList(La,Lb,Lc);
 printf("\n将链表La和Lb合并为Lc\n");
 PrintList(Lc);
 printf("\n\n\t                               杨佳宁创作");
 return 0;
}

数据结构C语言实现顺序链表基本操作(插入,排序,合并)相关推荐

  1. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  2. C语言实现单链表基本操作

    C语言实现单链表基本操作的 目录

  3. C语言创建顺序表并插入元素 详细注释

    顺序表是用一组地址连续的存储单元依次存储数据元素的数据结构.顺序表是线性表的一种,线性表是最常用且最简单的一种数据结构,一个线性表是 n 个数据元素的有限序列.我们使用 c 语言来创建顺序表并插入元素 ...

  4. 数据结构Java实现03----单向链表的插入和删除b

    文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定)            概念: 链式存储结构是基于指针实现的.我们把一个数据 ...

  5. Java数据结构——Java语言下的链表

    文章目录 1. Java语言下的链表 1.1 内部类定义结点 1.2 初始链表,只有头结点 1.3 清空链表 1.4 返回元素的位置(在第几个结点) 1.5 在某个结点处插入元素 1.5 删除某个结点 ...

  6. c语言判断顺序链表是否为空,数据结构之线性表(五)——单链表(2 初始化,判断空表,销毁,清空,求表长)...

    1.单链表(带头结点)的初始化 即,构造一个空表,如下图, 算法步骤: 1.生成新结点作头结点,用头指针L指向头结点. 2.将头指针的指针域置空. 算法描述: Status InitList_L(Li ...

  7. 数据结构专题(二):2.4链表的插入操作,头插法

    头插法一: 思想如下图: 如下代码: ///头插法建立单链表 LinkListNode *Create_Front_Lklist(ElemType arr[],int length) {LinkLis ...

  8. 数据结构(C语言描述)——顺序表

    上一篇文章里面我们创建了一个封装预处理命令和宏定义的头文件"StdFile.h",现在我们再次引用此头文件,进行后续操作. 可能读者对顺序表的结构有点难以理解,这里举一个形象的例子 ...

  9. 数据结构(C语言版)——顺序栈(代码版)

    一.代码 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 10 #define OK 1 #define ERROR ...

最新文章

  1. HTML解析利器HtmlAgilityPack
  2. javascript中对变量类型的推断
  3. form子句语法错误_用示例语法解释SQL的子句
  4. Tensorflow深度学习应用(进阶篇)
  5. 推荐]招商就象谈恋爱
  6. HNU 实验五松雅的旅馆
  7. Linux上mysql安装详细教程
  8. idea中ssm自动配置
  9. linux读取.data文件,Android获取文件夹路径 /data/data/
  10. linux系统下Gaussian16和Gaussian view6的详细安装步骤
  11. Js获取外网IP地址
  12. Python爬虫-博客and贴吧
  13. 编译SAM BA报错
  14. idea运行web项目光标乱跳
  15. 仿支付宝输入密码界面
  16. Camera效果测试-白平衡AWB测试
  17. 安装 Black Duck
  18. css梯形 transform和动画
  19. 当运行pychrm时遇到please select a valid interpreter怎么解决
  20. TensorFlow学习--tf.summary.histogram与直方图仪表板/tensorboard_histograms

热门文章

  1. 天猫赔付项目有风险吗?
  2. 公网zabbix监控内网Windows主机(调整主动模板)
  3. Linux上的基础网络设备总结
  4. 【Vue3】学习:常用的组合式Api
  5. php开发APP接口(一)
  6. 有哪些适合女生戴的蓝牙耳机?适合女生用的蓝牙耳机推荐
  7. 学习最新大厂付费视频时整理的万字长文+配图带你搞懂 MySQL
  8. [Qt5] QSlider设置步长
  9. sql注入-02mysql注入
  10. 远程管理 KVM 虚机 - 每天5分钟玩转 OpenStack(5)