博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个单链表并归
阅读量:6039 次
发布时间:2019-06-20

本文共 2039 字,大约阅读时间需要 6 分钟。

 

#include <stdio.h>
#include <stdlib.h>
#define  OK 1
#define  ERROR  0

typedef int ElemType,Status;

 

typedef struct LNod

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

//创建单链表
void CreateList_L(LinkList &L,int n)
{
 int i;
 LinkList p,q;
 L=(LinkList)malloc(sizeof(LNode));
 L->next = NULL;
 q=L;
 for (i=0;i<n;i++)
 {
  p=(LinkList)malloc(sizeof(LNode)); 
  scanf("%d",&p->data);
  q->next=p;
  q=p;
 }
 q->next=NULL;
}

//取出单链表中的某个元素

Status GetElem_L(LinkList L,int pos,ElemType &e)
{
 
 LinkList p=L->next;
 int j=1;
 while (p && j<pos)
 {
  p=p->next;
  j++;
 }
 if(!p)
 {
  return 0;
 }else
 {
  e=p->data;
 }
 
 return e;
}

//往单链表中插入一个元素

Status ListInsert_L(LinkList &L,int pos,ElemType e)
{
 LinkList q;
 LinkList p=L->next;
 int j=1;
 while (p&&j<pos-1)
 {
  p=p->next;
  j++;
 }
 if (!p)
 {
  return 0;
 }
 else
 {
  q=(LinkList)malloc(sizeof(LNode));
  q->data=e;
  q->next=p->next;
  p->next=q;
 }
 return 1;
}

//并归  充分利用前面写好的函数  GetElem_L  ListInsert_L
//另外再实现 int LocatElemt(LinkList L,ElemType e)
// 1 把L2的元素逐个取出来存在E中
// 2 把E和L1的元素进行比较,看L1中有没E存在
// 3 不存在,则把E插入到L1的后面

//计算单链表的长度

int len_l(LinkList L)
{
 LinkList p;
 p=L->next;
 int j=0;
 while (p)
 {
  j++;
  p=p->next;
 }
 return j;
}

//把e和L的元素进行比较,看L中有没e存在

int LocatElemt(LinkList L,ElemType e)
{
 LinkList p=L->next;
 int Len=len_l(L);
 int j=1;
 while (j<=Len && p->data!=e)
 {
  j++;
  p=p->next;
  
 }
 if(!p)
  return 0;
 else
  return j;
 }

//两个单链表进行并归

void add_L(LinkList L1,LinkList L2)
{
 int L1len=len_l(L1);
 int L2len=len_l(L2);
 int j;
 ElemType e;
 for (j=1;j<=L2len;j++)
 {
  GetElem_L(L2,j,e);
  if (LocatElemt(L1,e)==0)
  {
   ListInsert_L(L1,++L1len,e);
  } 
 }
}

//输出单链表

void list_printf(LinkList L)
{
 LinkList p;
 p=L->next;
 while (p)
 {
  printf("%d  ",p->data);
  p=p->next;
 }
}

void main()

{
 LinkList L1,L2;
 printf("请输入L1单链表的值:\n");
 CreateList_L(L1,4);
// printf("L1的长度为:%d\n",len_l(L1));
 printf("请输入L2单链表的值:\n");
 CreateList_L(L2,3);
 printf("L1单链表的值为:\n");
 list_printf(L1);
 printf("\n");
 printf("L2单链表的值为:\n");
 list_printf(L2);
 printf("\n");
 printf("并归后的单链表为:\n");
 add_L(L1,L2);
 list_printf(L1);
 printf("\n");
 
}

 

 

运行结果:

转载于:https://www.cnblogs.com/wangliangliang/p/3207622.html

你可能感兴趣的文章
【混淆矩阵】完整版
查看>>
jboss-as- 7.1.1.Final配置jndi数据源
查看>>
JavaScript:数据类型
查看>>
POI之Excel导出
查看>>
yii2 緩存
查看>>
Spring事务管理(详解+实例)
查看>>
java程序中获取kerberos登陆hadoop
查看>>
C#图解教程 第十七章 泛型
查看>>
SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区(转载)
查看>>
windows 2003 Server平台Delphi程序不支持直接调用webservice
查看>>
故事:用户凭什么跟你走
查看>>
三个 CSS 预处理器(框架):Sass、LESS 和 Stylus
查看>>
【转】QT中QWidget、QDialog及QMainWindow的区别
查看>>
Azure Storage (26) HTML5播放Azure Storage MP4问题
查看>>
收集常用的正则表达式
查看>>
C++ 术语(C++ Primer)
查看>>
otl插入数据不成功
查看>>
查询数据库中满足条件的特定行数据
查看>>
C#编写简单的聊天程序
查看>>
Timus1132(二次剩余方程求解)
查看>>