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

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

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

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

下面是代码:

//======================================================================
//
//        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

时间: 2024-10-13 20:49:35

【数据结构】顺序存储单链表的相关文章

C#数据结构-单链表

理论基础: 链表是用一组任意的存储单元来存储线性表中的数据元素. 如果结点的引用域只存储该结点直接后继结点的存储地址,则该链表叫单链表(Singly Linked List). 单链表由头引用H唯一确定.头引用指向单链表的第一个结点,也就是把单链表第一个结点的地址放在H中. C#实现: 1接口 引用线性表的接口IListDS<T> 2实现 首先,必须定义一个单链表的节点类.  1 public class Node<T> 2    { 3        private T data

数据结构之单链表(C++实现)

有一段时间没有写一些关于数据结构的程序了,正好算法导论这门课学到红黑树,感觉数据结构都忘得差不多了,而且考研还要考,故再拿来复习一下. 一.C++实现单链表 #include<iostream> using namespace std; typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; void CreateList_L(LinkList &L, int n) { L = new LNode()

数据结构之——单链表

今天闲来无事,就打算把大一的时候写过的数据结构重温一遍,基本上我在大一之后只在单片机上用过几次顺序表和循环队列之外再就很少使用过数据结构了. 并且乘着写一下数据结构也可以熟悉熟悉vim. 首先定义单链表节点: 1 #define DataType int 2 3 struct node{ 4 DataType data; 5 struct node *next; 6 }; 7 struct node list,*p_list; 单链表这个数据结构需要一些函数来对她操作,一般需要有这些: 1.初始

数据结构(一) 单链表的实现-JAVA

数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数组.树这种顺序来学习数据结构这门课程把. -WH 一.单链表的概念 链表是最基本的数据结构,其存储的你原理图如下图所示 上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何的数据,只是充当一个指向链表中真正存放数据的第一个节点的作用,而每个节点中都有一个next引用,指向下一

Java数据结构之单链表

链表的组成:链表头+结点 ? ?链表头一般只存储下一个节点的引用 ? ?节点:存数据+下一个节点的引用 链表头代码: package?com.xingej.algorithm.datastructure.linkedList.singleLinkedList; /** ?*?声明一个链表的头部 ?*? ?*?从链表头的使用,联想到hadoop,spark,netty中都有上下文context ?*? ?*[email protected]?erjun?2017年12月8日?上午8:45:08 ?

java数据结构:单链表常见操作代码实现

一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashMap等集合的底层结构都是链表结构.链表以结点作为存储单元,这些存储单元可以是不连续的.每个结点由两部分组成:存储的数值+前序结点和后序结点的指针.即有前序结点的指针又有后序结点的指针的链表称为双向链表,只包含后续指针的链表为单链表,本文总结的均为单链表的操作. 单链表结构: Java中单链表采用No

数据结构之单链表

1. 链表的特点 链表是一种非线性.非顺序的物理结构,是由若干个节点组成. 链表采用的是“见缝插针”的存储方法,不要求内存连续,靠next指针关联起来. 链表的物理存储方式为随机存储,访问方式为顺序访问. 查找节点的时间复杂度为O(n),插入.删除节点的时间复杂度为O(1). 链表适用于写操作多,读操作少的场景. 1 //单向链表节点的数据结构 2 struct SingleListNode 3 { 4 int nData;//当前节点的数据 5 Node* pNext;//指向下一个节点的指针

数据结构关于单链表的一些操作的源代码

单链表的可以有许多问题,这是我特意整理一下的有关他的相关操作,给出代码,有需要的可以自己调试,重要的就是关于环的一些操作: #include <iostream>#include <cstdio>#include <cstdlib>#include <ctime>using namespace std;typedef int Elemtype;typedef struct Node{ Elemtype data; struct Node *next;}Nod

数据结构:单链表结构字符串(python版)

1 #!/urs/bin/env python 2 # -*- coding:utf-8 -*- 3 4 #异常类 5 class stringTypeError(TypeError): 6 pass 7 8 #节点类 9 class Node(object): 10 def __init__(self, elem, next_ = None): 11 self.elem = elem 12 self.next = next_ 13 #单链表类 14 class single_list(obje