数据结构 线性表 建立单链表(头插法)

原创 2013年12月02日 18:54:13
#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE    100
#define LISTLNCREMENT     10
#define OK                1
#define ERROR             0
#define OVERFLOW          -2

typedef int ElemType;

typedef struct
{
	ElemType *elem;
	int length;
	int listsize;
}SqList;


int InitList_Sq(SqList &L)
{
	L.elem = (ElemType *) malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if (!L.elem)
	{
		exit(OVERFLOW);
	}
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
	return OK;
}

void Create_Sq(SqList &L, int n)
{
	int i;
	for (i=0; i<n; i++)
	{
		scanf("%d",&L.elem[i]);
	}
	L.length = n;
}

void Display_Sq(SqList L)
{
	int i;
	for (i=0; i<L.length ; i++)
	{
		printf("%d ",L.elem[i]);
	}
	printf("\n");
}

int ListInsert_Sq(SqList &L, int i, ElemType e)
{
	ElemType *newbase,*p,*q;
	if (i<1 || i>L.length+1)
	{
		return ERROR;
	}
	if (L.length >= L.listsize)
	{
		newbase = (ElemType *)realloc(L.elem ,(L.listsize + LISTLNCREMENT) * sizeof(LISTLNCREMENT));
		if (!newbase)
		{
			exit(OVERFLOW);
		}
		L.elem = newbase;
		L.listsize += LISTLNCREMENT;
	}
	q = &(L.elem [i-1]);
	for (p=&(L.elem[L.length-1]);p>=q;--p)
	{
		*(p+1) = *p;
	}
	*q = e;
	++L.length ;
	return OK;
}



int equal(ElemType i, ElemType j)
{
	return (i==j);
}


int LocateElem_Sq(SqList L, ElemType e, int (*compare)(ElemType, ElemType))
{
	ElemType *p;
	int i = 1;
	p = L.elem; 
	while (i <= L.length  && !(*compare)(*p++,e))
	{
		++i;
	}
	if (i<=L.length)
	{
		return i;
	}
	else
	{
		return 0;
	}
}



void GetElem(SqList L,int i, ElemType &e)
{
	e = L.elem[i-1];
}

void Listunion(SqList &La, SqList Lb)
{
	int i,e;
	int la_len = La.length ;
	int lb_len = Lb.length ;
	for (i=1; i<=lb_len; i++)
	{
		GetElem(Lb,i,e);
		if (!LocateElem_Sq(La,e,equal))
		{
			ListInsert_Sq(La,++la_len, e);
		}
	}
}





		
int main()
{
	int n;
	SqList La,Lb;
	InitList_Sq(La);
	InitList_Sq(Lb);
	printf("请输入链表La的长度: ");
	scanf("%d",&n);
	printf("请输入 %d 个数据: ",n);
	Create_Sq(La,n);
	printf("请输入链表Lb的长度: ");
	scanf("%d",&n);
	printf("请输入 %d 个数据: ",n);
	Create_Sq(Lb,n);
	printf("合并后的两个链表是:");
	Listunion(La,Lb);
	Display_Sq(La);


	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构【线性表(二)链表】项目一--建立单链表

1. 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。 2.复杂度的要求,设计算法并用专门的函数实现算法; 3.理论与实践相结合

数据结构(2)--线性表单链表的主要操作的实现

 参考书籍:数据结构(C语言版) 严蔚敏 吴伟民编著 清华大学出版社 1.基本定义 #include #include //线性表的两种存储结构: //1.顺序表(动态数组实现、静态数组实...

《大话数据结构》第3章 线性表 3.8.2 单链表的删除

3.8.2 单链表的删除         现在我们再来看单链表的删除。设存储元素ai的结点为q,要实现将结点q删除单链表的操作,其实就是将它的前继结点的指针绕过,指向它的后继结点即可(如图3...

数据结构线性表(二)之单链表读取、插入、删除

一.链式存储结构个人理解 数据元素不再考虑相邻位置,而是只要哪有空位就到哪,只要让每个元素知道下一位元素的位置就好(用到指针) 二.单链表相关概念推出 1.数据域:ai元素存储自身信息 2.指...

数据结构学习----线性表的链式表示之升序排序的单链表(Java实现)

线性表接口LList: package com.clarck.datastructure.linked; /** * 线性表接口LList,描述线性表抽象数据类型,泛型参数T表示数据元素的数据类...

Java数据结构(三):线性表之单链表

链式存储结构存储线性表的方法是把存放数据元素的结点用指针域构造成链。指针是指向下一个节点的引用,由数据元素域和一个或若干个指针域组成的一个类称之为结点。链式存储结构的特点是数据元素间的逻辑关系表现在节...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)