线性表及其基本操作

线性表(linear list):

一个线性表是n个具有相同特性的数据元素的有限序列,是最基本、最简单、也是最常用的一种数据结构。

 

线性表的顺序表存储结构:

#define LISTSIZE 100         //定义线性表长度为100
typedef int DateType;        //定义线性表内元素(数据)类型为整型
typedef struct SeqList       //定义线性表结构体
{
	DateType date[LISTSIZE]; //线性表元素数组
	int nLengh;              //线性表长度
}SeqList;                    //结构体别名为SeqList

 

基本操作:

1.初始化操作,即清空线性表。

void initList(SeqList *list)
{
	list -> nLenth = 0;
 } 

2.判断线性表是否为空

bool listEmpty(SeqList *list)
{
	return list -> nLenth ==0;
}

3.将线性表中的所有元素删除

void clearList(SeqList *list)
{
	list -> nLenth = 0;
 } 

4.获取线性表L中的元素个数

int listLenth(SeqList *list)
{
	return list -> nLenth;
 } 

5.获取线性表中下标为i的元素

DateType*getNode(SeqList *list, int i)
{
	if(i<0 || i>list->nLengh-1)
	    return NULL;
	return &list->date[i];
 } 

6.在线性表中查找指定元素

int locateNode(SeqLise *list, DateType x)
{
	for(int i=0; i<list->nLenth; i++)
	    if(list->date[i] == x)
	        return i;
	return -1;
 } 

7.在线性表中下标为i的位置插入元素

bool insert(SeqList &list, int i, DateType x)
{
	if(list->nLengh == LISTSIZE)
	    return false;
	int insertPosition = i;
	if(i < 0)
	    insertPosition = 0;
	if(i > list->nLengh-1)
	    insertPosition = list->nLengh;
 } 

8.将线性表中下标为i的元素删除

bool DelateList(SeqList *list, int i)
{
	if(i<0 || i>=list->nLengh)
	    return false;
	for(int i=1; i<list->nLengh-1; i++)
	    list->date[i] = list->date[i+1];
	list->nLengh --;
	return true;
 } 

9.将两个线性表合并

void union(SeqList *a, SeqList *b)
{
	if(a->nLengh + b->nLengh > LISTSIZE)
	    return ;
	for(int i=0; i<b->nLengh; i++){
		DateType e = b->date[i];
		if(locateNode(a,e) == -1){
			insert(a, a->nLengh, e);
		}
	}
 } 

10.将线性表倒置

void reverse(SeqList *list)
{
	for(int i=0; i<list->nLengh/2; i++)
	{
		DateType t = list->date[i];
		list->date[i] = list->date[list->nLengh-1-i];
		list->date[list->nLenth-1-i] = t;
	}
 } 

11.线性表的遍历,即将线性表中的所有元素访问一遍。

void printf(DateType d){
	printf("%d\n", d);
} 
void trave(SeqList *list, void(*visitFun)(DateType)){
	for(int i=0; i<list->nLengh; i++){
		visitFun(list->date[i]);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值