阔别两年再用C++

今天一高中同学发短信求助,帮忙写一段程序,实现2个单链表的合并,并按升序排列。

哎,当初没有好好学习,数据结构什么的很差劲,只有硬着头皮,看书,查资料,终于算是用

C++编写出来了,虽然检查错误耗费了一个下午。
#include <iostream>
using namespace std;
#define  NUM  8

struct LNode
{ 
 int data;
 struct LNode *next;
};

typedef struct LNode * LinkList;

/**
将数组插入链表
*/
  void create(LinkList &list, int a[])
{
 struct LNode *p;
 int i;
 list->next = NULL;

 for (i = NUM-1; i >= 0; --i)
 {
  p = new LNode;
  p->data = a[i];
  p->next = list->next;
  list->next = p;
 }
}

 
/**
显示链表节点值
*/
  void show(LinkList list)
{
 struct LNode *p;
 p = list->next;
 
 while (p)
 {
  cout << p->data << ' ';
  p = p->next;
 }
}

/**
合并链表
  */
 LinkList Merge(LinkList la, LinkList lb, LinkList &lc)
 {
    
     LNode *p;

     // 确定最大值在la上, 还是lb上
     if(la->data > lb->data)
	 {
     lc = p = la;
     la = la->next; 
	 }
     else 
	 {
    lc = p = lb; 
    lb = lb->next;
	 }

     while(la && lb)
	 {
         if(la->data <= lb->data)
		 {
             p->next = la;
             la = la->next;
         }
		 else 
         {
             p->next = lb;
             lb = lb->next;
         }
		 
         p = p->next;
     }
     // 剩余部分链表的挂接
    p->next = (la ? la:lb);

	 return lc;
 }
 

void main()
{
 LinkList s;
 LinkList u;
 LinkList A;

 int ss[NUM]={1,3,5,7,9,11,13,17};
 int uu[NUM]={2,8,14,19,21,25,26,33};


 s = new LNode;
 u = new LNode;
 A = new LNode;
 create(s, ss);
 create(u, uu);

 
 
 cout<<"链表s显示:"<<endl;
 show(s);
 cout<<endl;
 cout<<"链表u显示:"<<endl;
 show(u);
 cout<<endl;

 Merge(s,u,A);
 cout<<"合并之后链表A显示:"<<endl;
 show(A);
 cout<<endl;

}


程序 = 数据结构 + 算法

基础不扎实很难向上发展,否则只能成为代码民工;

给自己打个气,一步一步来,向着自己的梦想慢慢前进。

浪费的青春要自己争回来!

你可能感兴趣的:(数据结构,C++,c,算法,C#)