【數據結構】線性錶鏈式存儲結構-有序鏈表

文章目錄

基本操作

//宏定義
#define FAILED		0
#define SUCCESS		1

typedef struct OLNode
{
	int data;
	struct OLNode* next;
}OLinkNode;

// 創建有序表
OLinkNode* CreateOLinkNode(int  a[], int n)
{
	OLinkNode* L = (OLinkNode*)malloc(sizeof(OLinkNode));
	OLinkNode* s;
	OLinkNode* r ;
	OLinkNode* p;
	L->next = NULL;
	int temp = a[0];
	for (int i = 0; i < n; i++)
	{
		p = (OLinkNode*)malloc(sizeof(OLinkNode));
		p->data = a[i];
		p->next = NULL;
		s = L;
		while (s->next &&a[i] >=s->next->data)
		{	
			s = s->next;
		}
		p->next = s ->next;
		s->next = p;
		s = p;
	}
	return L;
}

//顯示
void DispOLinkList(OLinkNode* L)
{
	OLinkNode* s = L->next;
	s = L->next;
	while (s)
	{
		printf("%d  ", s->data);
		s = s->next;
	}
	printf("\n");
}

// 摧毀
void DestroyOLinkList(OLinkNode* L)
{
	OLinkNode* s = L;
	OLinkNode* next = L->next;
	while (next)
	{
		free(s);
		s = next;
		next = next->next;
	}
	free(s);
}

//插入
void  OLinkListInsert(OLinkNode* L, int  e)
{
	OLinkNode* p = L;
	while ( p->next&&p->next->data<e)
	{
		p = p->next;
	}
	OLinkNode* t = (OLinkNode*)malloc(sizeof(OLinkNode));
	t->data = e;
	t->next = p->next;
	p->next = t;
}

應用

//有序表的二路歸併,將L1和L2合併到有序表L中,並且不破壞原先L1和L2
OLinkNode* UnionOLinkList(OLinkNode* L1, OLinkNode* L2)
{
	OLinkNode* L = (OLinkNode*)malloc(sizeof(OLinkNode));
	OLinkNode* p1 = L1->next;
	OLinkNode* p2 = L2->next;
	OLinkNode* s;
	OLinkNode* r = L;
	while (p1 && p2)
	{
		s = (OLinkNode*)malloc(sizeof(OLinkNode));
		if (p1->data >= p2->data)
		{
			s->data = p2->data;
			p2 = p2->next;
		}
		else
		{
			s->data = p1->data;
			p1 = p1->next;
		}
		r->next = s;
		r = s;
	}
	if (!p1)
	{
		while (p2)
		{
			s = (OLinkNode*)malloc(sizeof(OLinkNode));
			s->data = p2->data;
			r->next = s;
			r = s;
			p2 = p2->next;
		}
	}
	else
	{
		while (p1)
		{
			s = (OLinkNode*)malloc(sizeof(OLinkNode));
			s->data = p1->data;
			r->next = s;
			r = s;
			p1 = p1->next;
		}
	}
	r->next = NULL;
	return L;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章