(四)C++双向链表排序

                                       C++双向链表排序

建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成,数据类型为整型。)

输入

第一行:双向表的长度; 
第二行:链表中的数据元素。

输出

输出双向链表中的数据元素的值。

样例输入

10
2 4 6 3 5 8 10 21 12 9

样例输出

2 3 4 5 6 8 9 10 12 21
// 10双向链表的操作问题.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;
typedef int ElemType;
class List {
	public:
		List();
		List(int data);
		void Create_List(int len);
		void Sort();
		void Output();
		~List();
	private:
		ElemType Data;
		List *Prior;
		List *Next;
};
List::List() {
	this->Prior = NULL;
	this->Next = NULL;
}
List::List(int data) {
	this->Data = data;
}
void List::Create_List(int len) {
	List *L,*Node;
	int data;
	int i=0;
	L = this;
	this->Data = len;
	while (i<len)
	{
		cin >> data;
		Node = new List(data);
		L->Next = Node;
		Node->Prior = L;
		L = Node;
		i++;
	}
	L->Next = NULL;
}
void List::Sort() {
	List *Node;
	int Temp;
	int i, j;
	for (i = 0; i < this->Data;i++) {
		Node = this->Next;
		for (j = 0; j < this->Data - i - 1;j++) {
			if (Node->Data > Node->Next->Data) {
				Temp = Node->Data;
				Node->Data = Node->Next->Data;
				Node->Next->Data = Temp;
			}
			Node = Node->Next;
		}
	}
}
void List::Output() {
	List *L = this->Next;
	while (L) {
		cout << L->Data << " ";
		L = L->Next;
	}
}
List::~List() {
	if (this->Next) {
		delete this->Next;
	}
}
int main()
{
	int Len;
	List *Head = new List;
	cin >> Len;
	Head->Create_List(Len);
	Head->Sort();
	Head->Output();
	delete Head;//养成好习惯
    return 0;
}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页