数据结构学习(转)

递归调用 简单

 

 

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

 

 

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

 

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
投票
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议