⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mergelist.cpp

📁 这是数据结构中的指针合并,传上来大家互相学习,大家共同进步
💻 CPP
字号:
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
//#include "stdafx.h"
#define ElemType int
typedef struct LNode{
     ElemType data;
	 struct LNode *next;
}LNode,*LinkList;
void CreateList_L(LinkList &L,int n) {  // 算法2.11
  // 逆位序输入n个元素的值,建立带表头结点的单链线性表L 
  LinkList p;
  int i,kk;
  L = (LinkList)malloc(sizeof(LNode));
  L->next = NULL;              // 先建立一个带头结点的单链表
  for (i=n; i>0; --i) {
    p = (LinkList)malloc(sizeof(LNode));  // 生成新结点
    cin>>kk;
	p->data=kk;
    p->next = L->next;    L->next = p;    // 插入到表头
    }
} // CreateList_L
void MergeList_L1(LinkList &La, LinkList &Lb, LinkList &Lc) {
  // 算法2.12
  // 已知单链线性表La和Lb的元素按值非递减排列。
  // 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列。
  LinkList pa, pb, pc;
  pa = La->next;    pb = Lb->next;
  Lc = pc = 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;  // 插入剩余段
  free(Lb);                 // 释放Lb的头结点
} // MergeList_L
void PrintList(LinkList &L)
{
	LinkList Ls;
	Ls=L->next;//跳过头结点
    printf("\n");
	while(Ls!=NULL)
	{ printf("%d   ",Ls->data);
	  Ls=Ls->next;
	}
	printf("\n");
}
main()
{  LinkList L1,L2,L3;
   CreateList_L(L1,4);
    printf("L1中的数据是:");    
        PrintList(L1);
   CreateList_L(L2,7);
printf("L2中的数据是:");    
PrintList(L2);
    MergeList_L1(L1,L2,L3);
	printf("合并后的L3中的数据是(重复的保留):");
PrintList(L3);
return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -