线性表(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]);
}
}