一.定义
线性表是具有零个或多个数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
线性表的基本特征:
- 第一个数据元素没有前驱元素;
- 最后一个数据元素没有后继元素;
- 其余每个数据元素只有一个前驱元素和一个后继元素。
ADT 线性表(ScqucncoList)
Data
1、线性表数据元素是一个集合{a_1,a_2,a_3...a_n},数据元素类型DataType(int、char、自定义)
2、前驱:除了第一个元素a_1(头结点)外,每个元素有且只有一个前驱
3、后继:除了最后一个元素a_n(尾节点)外,每个元素有且只有一个后继元素
4、每个数据元素之间的关系是一一对应的关系
Operation
初始化 initList(*List) 创建一个空的线性表
插入 InsertElement(*List,inder(插入到哪里),elem(插入什么元素)):在List的inder下标下插入elem元素
删除 DeleteElement(*List,inder,*elem(删除元素的地址)):删除线性表List中第inder个元素,并返回删除指针e
查找 ExsitElement(*List,elem) 在List中查找是否存在元素elem,是的话返回元素下标,否的话返回-1
获取 GetElement(*List,i,*elem): 将第i个元素的值返回个给elem
获取长度 GetLenght(*List)
返回boot值 IsElement(*List) :若线性表为空,返回False;不为空,返回True清空 ClearElement(*List)
排序SelectSort(List &L)
二.具体操作
1.初始化
initList(*List)
struct ListNode
{
int val ;
ListNode * next ;
ListNode ( int x ) : val ( x ) , next ( nullptr ) { }
} ;
2.插入
void InsertElement ( ListNode * head , int pos , int data )
{
ListNode * newNode = new ListNode ( data ) ;
ListNode * p = head ;
int index = 1 ;
while ( p != nullptr && index < pos )
{
p = p -> next ;
++ index ;
}
newNode -> next = p -> next ;
p -> next = newNode ;
return head ;
}
3.删除--后边完善
void DeleteElement ( ListNode * head , int pos )
{
ListNode * p = head ;
if ( p -> next == nullptr )
{
cout << "链表为空" << endl ;
return nullptr ;
}
ListNode * node = nullptr ;
int index = 1 ;
while ( p != nullptr && index < pos )
{
p = p -> next ;
++ index ;
}
if ( p != nullptr && p -> next != nullptr )
{
node = p -> next ;
p -> next = node -> next ;
delete node ;
}
return head ;
}
4.查找(查找第i个)
void ExsitElement ( ListNode * head , int pos )
{
if ( head -> next == nullptr || pos < 0 )
return nullptr ;
if ( pos == 0 )
return head ;
ListNode * p = head -> next ;
while ( -- pos )
{
p = p -> next ;
if ( p == nullptr )
{
cout << "incorrect postion to search node!" << endl ;
break ;
}
}
return p ;
}
5.查长
int GetLenght ( ListNode * head )
{
int len = 0 ;
ListNode * p = head -> next ;
while ( p != nullptr )
{
++ len ;
p = p -> next ;
}
return len ;
}
6.排序
void SelectSort(List &L)
{
int min;int temp;
for(int i=0;i<L.length;i++)
{
min=i;
for(int j=i+1;j<L.length;j++)
{
if(L.data[j]<L.data[min])min=j;
}
if(min!=i)
{
temp=L.data[min];
L.data[min]=L.data[i];
L.data[i]=temp;
}
}
PrintList(L);