資料結構二——線性表
2.1 線性表的含義
● 線性表(linear list)是資料結構的一種,一個線性表是n個具有相同特性的資料元素的有限序列,而且是有順序的。
● 數學定義
2.2 線性表的抽象資料型別
2.3 順序儲存結構
● 線性表的順序儲存結構
#define LISTSIZE 100
typedef int DataType
typedef struct SeqList
{
DataType data[LISTSIZE];
int nLength;
}SeqList;
順序表程式碼操作:(含初始化、判斷是否為空、刪除、獲取長度、查詢指定元素、插入、倒置)
#define LISTSIZE 100
typedef int DataType
typedef struct Seqlist{
DataType data[LISTSIZE];#最大長度
int nLength;#這是有效長度
}SeqList;
##初始化
void initList(SeqList *list)
{
list->nLength=0;
}
##判空
void ListEmpty(SeqList *list)
{
return list->nLength==0;
}
##刪除所有元素
void clearList(SeqList *list)
{
list->nLength=0;
}
## 獲取線性表中元素個數
void ListEmpty(SeqList *list)
{
return list->nLength;
}
## 獲取下標為i的元素
DataType* getNode(SeqList *list,int i)
{
if(i<0||i>list->nLength-1)
return NULL;
return &list->data[i];
}
##查指定元素
int locateNode(SeqList *list,DataType x)
{
for (int i =0;i<list->nLength;i++)
if (list->data==x)
return i;
return -1;
}
### 插入
bool insert (SeqList *list,int i ,DataType x)
{
if(list->nLength==LISTSIZE)
return false;
int position=i;
if (i<0)
position=0;
if (i>list->nLenth-1)
position=list->nLength;
for (int j=list->nLength-1;j>=position;j--)
list->data[j+1]=list->data[j];
{
list->data[position]=x;
list->nLength++;
return True;
}
## 兩個線性表聯合
void union(SeqList *a,SeqList *b)
{
if (a->nLength+b->nLength>LISTSIZE)
return ;
for (i=0;i<b->nLength;i++){
DataType e=b->data[i];
if(locateNode(a,e)==-1)
{insert(a,a->nLength,e);}
}
}
## 倒置
void reserve(SeqList *list)
{
for (int i=0;i<list->nLength/2;i++){
DataType t =list->data[i];
list->data[i]=list->data[list->nLength-1-i];
list->data[list->nLength-1-i]= t ;
}
}