Hoán Vị 2 Node Trong Danh Sách Liên Kết Đôi

Tạo danh sách liên kết đôi có n phần tử ngẫu nhiên
Sắp xếp = phương pháp đổi chổ trực tiếp
[AH]
Mã:
//++++++++++++++++++++++++++++++++++++++++//
//	Please don't remove if you use Code	  //
//		TapLamHacker VFO.VN			  //
//++++++++++++++++++++++++++++++++++++++++//
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<conio.h>
int n;
struct Node
{
	int data;
	Node *pNext;
	Node *pPre;
};
struct List
{
	Node *pHead;
	Node *pTail;
};
Node *GetNode(int a)
{
	Node *p = new Node;
	p->data = a;
	p->pNext = NULL;
	p->pPre = NULL;
	return p;
}
void AddTail(List &L,Node *a)
{
	if(L.pHead == NULL)
	{
		L.pHead = a;
		L.pTail = L.pHead;
	}
	else
	{
		L.pTail->pNext = a;
		a->pPre = L.pTail;
		L.pTail = a;
	}
}
void CreateList(List &L, int n)
{
	while(n != 0)
	{
		int tmp = 1 + rand()%100;
		Node *p = new Node;
		p = GetNode(tmp);
		AddTail(L,p);
		n--;
	}	
}
void OutList(List L, int n)
{
	Node *p = new Node;
	p = L.pHead;
	while(n!=0)
	{
		printf("%d ",p->data);
		p = p->pNext;
		n--;
	}
}
void Sort(List &L)
{
	int dem = 0;
	int dem1 = 0;
	for(Node *p = L.pHead ; p->pNext != NULL; p= p->pNext)
	{
		for(Node *q = p->pNext ; q != NULL ; q = q->pNext)
		{
			if(p->data > q->data)
			{
				Node *tmp = new Node;;
				tmp =GetNode(q->data);
				tmp->pNext = p->pNext;
				tmp->pPre = p->pPre;
				if(p->pPre != NULL)
					p->pPre->pNext = tmp;
				else
					L.pHead = tmp;
				p->pNext->pPre = tmp;
				p->pNext = q->pNext;
				p->pPre = q->pPre;
				if(q->pNext != NULL)
					q->pNext->pPre = p;
				else
					L.pTail = p;
				q->pPre->pNext = p;
				p = tmp;
			}		
		}
	}
}
int main()
{
	List L;
	L.pHead = NULL;
	L.pTail = NULL;
	printf("Input n:");
	scanf("%d",&n);
	srand(time(NULL));
	CreateList(L,n);
	printf("List before Sort: \n");
	OutList(L,n);
	printf("\n");
	Sort(L);
	printf("\n");
	printf("List after Sort: \n");
	OutList(L,n);
	printf("\n");
	char *_="%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c";
	int __=3**_+5;
    printf("\n\n\t\   \t\t");
	printf(_,__+59,__-32,__-19,__-4,__-21,__-40,__+17,__-7,__-21,__-44,__-19,__-17,__-9,__-15,__-2,__+58);
	getch();
	
}
[/AH]
 

Sửu Nguyễn

⭐️⭐️⭐️⭐️⭐️
Đã chiến :ha:
fSFLi3C.jpg
 

Thống kê

Chủ đề
102,787
Bài viết
470,610
Thành viên
340,593
Thành viên mới nhất
winspire
Top