码迷,mamicode.com
首页 > 其他好文 > 详细

【数据结构】顺序存储单链表

时间:2015-02-01 10:49:59      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:数据结构   单链表   


数据结构单链表的顺序存储实现

闲来无事,回顾下以前学过的数据结构,写个玩玩,理论的东西就不多说了,网上一搜一大堆;

重要的是需要掌握这种数据结构的思想,整个数据结构这门课最重要的也是思想!

下面是代码:

//======================================================================  
//  
//        Copyright (C) 2014-2015 SCOTT      
//        All rights reserved  
//  
//        filename: SeqList.c
//        description: a demo to display SeqList
//  
//        created by SCOTT at  01/26/2015 
//        http://blog.csdn.net/scottly1
//  
//======================================================================  

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

#define TRUE			1
#define FALSE			0
#define MAX_SIZE		1000

typedef int Type;
typedef int Bool;

typedef struct _tag_list
{
	Type *elem;
	int length;			// current length
	int size;			// max length
}LIST, *PLIST;


Bool createList(LIST *list, int len)
{
	if(len > MAX_SIZE || len <= 0 )
	{
		printf("### OVER MAX_LEN!\n");
		return FALSE;
	}

	list->elem = (Type *)malloc(len * sizeof(Type));
	if(NULL == list)
	{
		printf("### createList Create Error!\n");
		return FALSE;
	}
	else
	{		
		list->length = 0;
		list->size = MAX_SIZE;
	}

	printf("### createList Create list Success!\n");
	return TRUE;
}


Bool clearList(LIST *list)
{
	if(NULL == list)
	{
		printf("### clearList List Error!\n");
		return FALSE;
	}

	Type *p = list->elem;

	for(; p < list->elem + list->size; ++p)
	{
		memset(p, 0, sizeof(*p));
	}

	return TRUE;
}


Bool displayList(LIST *list)
{
	if(NULL == list)
	{
		printf("### displayList List Error!\n");
		return FALSE;
	}

	int i = 0;
	Type *p = list->elem;

	for(; p < list->elem + list->length; ++p, i++)
	{
		printf("list->elem[%d] = %d\n", i, *p);
	}

	return TRUE;
}


Bool insertList(LIST *list, int flag, Type elem)
{
	int i = 0;

	if(NULL == list || flag < 0 || flag >= list->size)
	{
		printf("### insertList List Error!\n");
		return FALSE;
	}

	if(list->length + 1 > list->size)
	{
		printf("### List Full!\n");
		return FALSE;
	}

	flag = flag>list->length?list->length:flag;

	for(i=list->length; i>flag; --i)
	{
		list->elem[i] = list->elem[i-1];
	}

	list->elem[i] = elem;
	++list->length;

	return TRUE;
}


Bool deleteList(LIST *list, int flag, Type *elem)
{
	int i = 0;

	if(NULL == list || flag < 0 || flag >= list->size)
	{
		printf("### deleteList List Error!\n");
		return FALSE;
	}

	if(list->length - 1 < 0 )
	{
		printf("### List Empty!\n");
		return FALSE;
	}

	flag = flag>list->length?list->length:flag;
	*elem = list->elem[flag];

	for(i=flag; i<list->length; ++i)
	{
		list->elem[i] = list->elem[i+1];
	}
	
	--list->length;

	return TRUE;
}


Bool mergeList(LIST *src1, LIST *src2, LIST *dst)
{
	int i = 0;
	Type *pA, *pB, *pC;
	Type *pA_last, *pB_last, *pC_last;

	if(NULL == src1 || NULL == src2 || NULL == dst)
	{
		printf("### displayList List Error!\n");
		return FALSE;
	}

	pA = src1->elem; pA_last = src1->elem + src1->length;
	pB = src2->elem; pB_last = src2->elem + src2->length;
	pC = dst->elem;

	while(pA < pA_last && pB < pB_last)
	{
		if(*pA >= *pB)
			*pC++ = *pB++;
		else
			*pC++ = *pA++;
		++dst->length;
	}

	while(pA < pA_last)
	{
		*pC++ = *pA++;
		++dst->length;
	}

	while(pB < pB_last)
	{
		*pC++ = *pB++;
		++dst->length;
	}

	return TRUE;
}



int main(int argc, char *argv[])
{
	LIST list1;
	LIST list2;
	LIST dst;
	Type elem1 = 10;
	Type elem2 = 30;

	createList(&list1, 5);
	createList(&list2, 5);
	createList(&dst, 10);

	printf("===================\n");
	insertList(&list1, 0, elem1);
	insertList(&list1, 1, elem1+1);
	insertList(&list1, 2, elem1+2);
	insertList(&list1, 3, elem1+4);
	insertList(&list1, 4, 100);
	displayList(&list1);

	printf("===================\n");
	insertList(&list2, 0, elem2+3);
	insertList(&list2, 1, elem2+4);
	insertList(&list2, 2, elem2+5);
	insertList(&list2, 3, elem2+6);
	insertList(&list2, 4, elem2+7);
	displayList(&list2);

	printf("===================\n");
	mergeList(&list1, &list2, &dst);
	displayList(&dst);

	printf("\n\n");	
	return 0;
}

注:原创文章,转载请注明出处:http://blog.csdn.net/scottly1/article/details/43154589


【数据结构】顺序存储单链表

标签:数据结构   单链表   

原文地址:http://blog.csdn.net/scottly1/article/details/43154589

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!