zoukankan      html  css  js  c++  java
  • 数据结构学习---有序链表的合并

    递归调用 简单

    有点像归并排序的合并部分吧。

    因为是用vs创建的工程,所以主函数是_tmain。

     1 // 链表.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 
     6 
     7 typedef struct Node {
     8     int data;
     9     struct Node *next;
    10 
    11 } LinkList;
    12 
    13 
    14 //链表组合的函数 输入:两个有序无头结点链表 输出:将链表组合成一个无头结点有序链表
    15 LinkList * combie(LinkList *l1, LinkList * l2) {
    16 
    17     LinkList * p=NULL;
    18 
    19     if (l1==NULL && l2==NULL)
    20     {
    21         p = NULL;
    22     }
    23     if (l1==NULL&&l2!=NULL)
    24     {
    25         p = (LinkList *)malloc(sizeof(LinkList));
    26         p->data = l2->data;
    27         p->next = combie(NULL, l2->next);
    28 
    29     }
    30 
    31     if (l2 == NULL&&l1 != NULL)
    32     {
    33         p = (LinkList *)malloc(sizeof(LinkList));
    34         p->data = l1->data;
    35         p->next = combie(l1->next,NULL);
    36 
    37     }
    38     if (l1!=NULL && l2!=NULL)
    39     {
    40         p = (LinkList *)malloc(sizeof(LinkList));
    41 
    42         p->data = l1->data <= l2->data ? l1->data : l2->data; 
    43         p->next = combie(l1->data <= l2->data ? l1->next : l1, l1->data <= l2->data ? l2 : l2->next);
    44     
    45     }
    46     return p;
    47 }
    48 
    49 
    50 
    51 //根据数组创建无头结点的链表
    52 LinkList * create(int a[], int n) {
    53     LinkList *h = NULL, *p, *pre = NULL;
    54     for (int i = 0; i < n; i++)
    55     {
    56         p=(LinkList *)malloc(sizeof(LinkList));
    57         p->data = a[i];
    58         if (pre) pre->next = p;
    59         pre = p;
    60         if (i == 0) h = p;
    61         if (i == n - 1) p->next = NULL;
    62         
    63     }
    64     return h;
    65 
    66 
    67 }
    68 
    69 
    70 //打印输出无头结点的链表
    71 void display(LinkList *list) {
    72     LinkList *p = list;
    73     while (p != NULL)
    74     {
    75         cout << p->data << " ";
    76         p = p->next;
    77     }
    78     cout << endl;
    79 
    80 }
    81 
    82 int _tmain(int argc, _TCHAR* argv[])
    83 {
    84     int a []= { 1, 2, 10, 80,500 };
    85     LinkList *l1 = create(a,5);
    86     display(l1);
    87     int b[] = { 0,4, 5, 100, 177,250 };
    88     LinkList *l2 = create(b, 6);
    89     display(l2);
    90     LinkList * p = combie(l1, l2);
    91     display(p);
    92     system("pause");
    93     return 0;
    94 }

     stdafx.h 的内容挺简单的

    // stdafx.h : 标准系统包含文件的包含文件,
    // 或是经常使用但不常更改的
    // 特定于项目的包含文件
    //
    
    #pragma once
    
    #include "targetver.h"
    
    #include <stdio.h>
    #include <tchar.h>
    
    
    
    // TODO:  在此处引用程序需要的其他头文件
    #include <iostream>
    #include <cstdlib>
    using namespace std;
  • 相关阅读:
    如何招到一个靠谱的程序员_转
    区块链blockchina简述
    TCP和UDPsocket中SO_SNDBUF和SO_RCVBUF_转
    Medium开发团队谈架构设计_转
    cgi与fastcgi区别_转
    RESTful
    各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT_转
    mosquitto简单应用
    组播MAC地址_转
    纳德拉再造微软:如何重回第一阵营?
  • 原文地址:https://www.cnblogs.com/xcr1234/p/4608233.html
Copyright © 2011-2022 走看看