#include<iostream>
#include<algorithm>
#include<assert.h>
using namespace std;
template<class ElemType>
struct Node
{
//数据成员
ElemType data; //数据域
Node<ElemType> *next; //指针域
//构造函数
Node(); //无参数的构造函数
Node(ElemType e, Node<ElemType> *Link = NULL); //有参数的构造函数
};
template<class ElemType>
Node<ElemType>::Node()
{
next = NULL;
}
template<class ElemType>
Node<ElemType>::Node(ElemType e, Node<ElemType> *link)
{
data = e;
next = link;
}
//单链表
template<class ElemType>
class LinkList
{
protected:
//单链表类模板的数据成员
Node<ElemType> *head; //头指针结点
int length; //元素个数
public:
//单链表类模板的函数成员
LinkList(); //无参数构造函数
LinkList(ElemType v[], int n); //有参数的构造函数
virtual ~LinkList(); //析构函数
int GetLength()const; //求链表长度
bool IsEmpty()const; //判断链表是否为空
void Clear(); //将链表清空
void UseMerge(LinkList<ElemType>p1, LinkList<ElemType>p2);
Node<ElemType>* merge(Node<ElemType> *head1, Node<ElemType> *head2); //合并
void output(); //将链表输出
};
//无参数的构造函数
template<class ElemType>
LinkList<ElemType>::LinkList()
{
head = new Node<ElemType>; //构造头函数
length = 0; //单链表长度定为0;
}
//有参数构造函数
template<class ElemType>
LinkList<ElemType>::LinkList(ElemType v[], int n)
{
//排序
for (int i = 0; i < n; i++)
{
for (int j = 1; j < n - i; j++)
{
if (v[j] < v[j - 1])
swap(v[j], v[j - 1]);
}
}
Node<ElemType> *p;
p = head = new Node<ElemType>; //构造头结点
for (int i = 0; i < n; i++)
{
p->next = new Node<ElemType>(v[i], NULL);
assert(p->next); //构造元素结点失败,终止程序运行
p = p->next;
}
length = n;
}
//析构函数
template<class ElemType>
LinkList<ElemType>::~LinkList()
{
Clear(); //清空链表
delete head; //释放头结点所指空间
}
//清空链表
template<class ElemType>
void LinkList<ElemType>::Clear()
{
Node<ElemType> *p;
p = head->next;
while (p != NULL)
{
cout << p->data;
head->next = p->next;
delete p;
p = head->next;
}
length = 0;
}
//求链表长度
template<class ElemType>
int LinkList<ElemType>::GetLength()const
{
return length;
}
//判断链表是否为空
template<class ElemType>
bool LinkList<ElemType>::IsEmpty()const
{
Node<ElemType> *p = head->next;
if (p != NULL)
return false;
return true;
}
//调用合并
template<class ElemType>
void LinkList<ElemType>::UseMerge(LinkList<ElemType>p1, LinkList<ElemType>p2)
{
head->next = merge(p1.head->next, p2.head->next);
}
//合并链表
template<class ElemType>
Node<ElemType>* LinkList<ElemType>::merge(Node<ElemType> *head1, Node<ElemType> *head2)
{
if (head1 == NULL)
return head2;
if (head2 == NULL)
return head1;
Node <ElemType> *head = NULL;
if (head1->data < head2->data)
{
head = head1;
head->next = merge(head1->next, head2);
}
else
{
head = head2;
head->next = merge(head1, head2->next);
}
cout << "e";
return head;
}
//输出链表
template<class ElemType>
void LinkList<ElemType>::output()
{
Node<ElemType> *p;
p = head->next;
while (p != NULL)
{
cout << p->data << ",";
p = p->next;
}
}
void main() {
cout << "输入第一组五个整数:";
int v1[1];
for (int i = 0; i < 1; i++)
cin >> v1[i];
cout<<"\n";
LinkList<int> p1(v1, 1);
cout << "输出有序单链表应为:";
p1.output();
cout << "\n";
cout << "输入第二组五个整数:";
int v2[1];
for (int i = 0; i < 1; i++)
cin >> v2[i];
cout << "\n";
LinkList<int> p2(v2, 0);
cout << "输出有序单链表应为:";
p2.output();
cout << "\n";
LinkList<int> p;
p.UseMerge(p1, p2);
cout << "合并两个单链表,合并后输出结果应为:";
p.output();
system("pause");
}问题出在析构有问题
目前暂无任何回答
- 0 回答
- 1 关注
- 1841 浏览
添加回答
举报
0/150
提交
取消