数据结构学习(转)

递归调用 简单

 

 

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

 

 

因为是用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;

 

全部评论

相关推荐

06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
06-18 13:28
已编辑
门头沟学院 Web前端
爱睡觉的冰箱哥:《给予你300的工资》,阴的没边了
点赞 评论 收藏
分享
码农索隆:这种hr,建议全中国推广
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务