# Linear table

I am stating ==
It's just a review for the postgraduate entrance examination dog. I usually write in java, but I'm a little confused when I suddenly switch to c, and my writing may not be standardized. Please correct me if I'm wrong, don't spray me with the glass heart! ! ! ! The algorithm and data structure of the java version of the black book may be sorted out later

Statement: I will not explain basic concepts, I want to read my own Baidu or buy my own books

The review materials (some non-full names) are:

"Royal Data Structure"

Tsinghua University Press "Data Structure (C Language Edition)" edited by Yan Weimin and Wu Weimin

Knowledge is valuable, this is just my collation of materials, and those who need to review or study well buy books by themselves! ! !

What a great book! ! ! Must buy it! ! buy it! ! buy it! !

## 1. Types and definitions of linear tables

### 1. Linear table abstract type definition

```ADT List{
data object:D={ai | ai ∈ ElementSet, i = 1,2,...,n,n≥0}
data relationship:R1={<ai-1,ai>|ai,ai∈ D,i = 2,...,n}
Basic operation:
InitList(&L)
Operation result:Constructs an empty linear table;

DestoryList(&L)
Initial Conditions: Linear Table L existed;
Result of the operation: Destroy the linear table L;

ClearList(&L)
Initial Conditions: Linear Table L existed;
Operation result: the L reset to empty table;

ListEmpty(L)
Initial Conditions: Linear Table L existed;
Operation result: if L is empty, return TRUE,otherwise return FALSE;

ListLength(L)
Initial Conditions: Linear Table L existed;
Operation result: return L The number of data elements in;

GetElem(L,i,&e)
Initial Conditions: Linear Table L already exists, 1≤i≤ListLength(L)
Operation result: with e return L The number of data elements in;

LocateElem(L,e,compare())
Initial Conditions: Linear Table L existed, compare()is the data element determination function;
Operation result: return L The 1st and e Satisfaction relationship compare()The bit order of the data elements. If no such data element exists, the return value is 0;

PriorElem(L,cur_e,&pre_e)
Initial Conditions: Linear Table L existed;
Operation result: if cur_e Yes L , and is not the first data element, use pre_e returns its predecessor, otherwise the operation fails, pre_e undefined;

NextElem(L,cur_e,&next_e)
Initial Conditions: Linear Table L existed;
Operation result: if cur_e Yes L , and is not the last data element, use next_e returns its successor, otherwise the operation fails, next_e undefined;

ListInsert(&L,i,e)
Initial Conditions: Linear Table L already exists, 1≤i≤ListLength(L)+1;
Operation result: in L B i Insert a new data element before positions e，L length+1

ListDelete(&L,i,&e)
Initial Conditions: Linear Table L exists and is not empty, 1≤i≤ListLength(L);
Result of operation: delete L First i data elements, and use e returns its value, L length-1

ListTraverse(L,visit())
Initial Conditions: Linear Table L existed;
Operation result: in turn L call the function for each data element of visit()，once visit()fails, the operation fails

```

#### Example 2-1 Combine two linear tables A and B to generate a new table A

​ Time complexity O(ListLength(LA) X ListLength(LB))

Title Assuming that two sets A and B are represented by two linear tables LA and LB respectively (that is, the data elements in the linear tables are members of the sets), a new set A= A∪B is required.

Analysis requires the following operations:

​ 1. Expand the linear table LA

​ 2. Insert what exists in the linear table LB but does not exist in the linear table LA into the linear table LA

​ As long as each data element is obtained from the linear table LB in turn, and is accessed in the linear table LA according to the value, if it does not exist, insert it

```void union(List &La,List Lb) {
//Insert all data elements in linear table Lb but not in La into La

//Length of linear table LA
La_len = ListLength(La);

//Length of linear table LB
Lb_len = ListLength(Lb);

//As long as each data element is obtained in turn from the linear table LB, and is accessed in the linear table LA according to the value, if it does not exist, insert it.
for(i=1;i<=Lb_len;i++){

//Get the i-th data element in Lb and assign it to e
GetElem(Lb,i,e);

//Traverse La, if there is no data element same as e in La, insert it
if(!LocateElem(La,e,equal))ListInsert(La,++La_len,e);
}
}
```

#### Example 2-2 Merge A.B to generate ordered table C

The time complexity is O(ListLength(LA) + ListLength(LB))

Title Knowing that the data elements in the linear tables LA and LB are arranged in non-decreasing order by value, it is now required to merge LA and LB into a new linear table LC, and the elements in LC are still in non-decreasing order by value.

To analyze data elements in LC or data elements in LA, or data elements in LB, as long as LC is an empty table first, then insert the elements in LA or LB into LC one by one

Operation In order to arrange the elements in LC in non-decreasing order by value, two pointers i and j can be set to point to an element in LA and LB respectively.

// Code from the book, but me as a working dog. . . I feel that a judgment needs to be added to LA and LB. . . That non-empty comment. . emmm. . .

```void MergeList(List La,List Lb,List &Lc){
//The data elements in the known linear tables La and Lb are arranged non-decreasingly by value
//Merge La and Lb to obtain a new linear table Lc, and the data elements of Lc are also arranged in non-decreasing value;

//Constructs a new empty table Lc
InitList(Lc);

//define variables i,j,k
i = j = 1;
k = 0;

//Length of linear table LA
La_len = ListLength(La);

//Length of linear table LB
Lb_len = ListLength(Lb);

while((i <= La_len)&&(j<= Lb_len)){//Both La and Lb are non-null

//Get the i-th data element in La and assign it to ai
GetElem(La,i,ai);

//Get the j th data element in Lb and assign it to bj
GetElem(Lb,j,bj);

//Judgmental Interpolation
if(ai<= bj) {
ListInsert(Lc,++k,ai);
++i;
}else{
ListInsert(Lc,++k,bj);
++j;
}
}
while(i<= La_len){
//Get the i-th data element in La and assign it to ai
GetElem(La,i,ai);

ListInsert(Lc,++k,ai);
}
while(j<= Lb_len){
//Get the j th data element in Lb and assign it to bj
GetElem(Lb,j,bj);
ListInsert(Lc,++k,bj);
}
}
```

Added the judgment non-empty

```void MergeList(List La,List Lb,List &Lc){
//The data elements in the known linear tables La and Lb are arranged non-decreasingly by value
//Merge La and Lb to obtain a new linear table Lc, and the data elements of Lc are also arranged in non-decreasing value;

//Constructs a new empty table Lc
InitList(Lc);

//define variables i,j,k
i = j = 1;
k = 0;

if(ListEmpty(La) || ListEmpty(Lb)){
prinf("Error,list is empty");
exit;
}else{

//Length of linear table LA
La_len = ListLength(La);

//Length of linear table LB
Lb_len = ListLength(Lb);

while((i <= La_len)&&(j<= Lb_len)){//Both La and Lb are non-null

//Get the i-th data element in La and assign it to ai
GetElem(La,i,ai);

//Get the j th data element in Lb and assign it to bj
GetElem(Lb,j,bj);

//Judgmental Interpolation
if(ai<= bj) {
ListInsert(Lc,++k,ai);
++i;
}else{
ListInsert(Lc,++k,bj);
++j;
}
}
while(i<= La_len){
//Get the i-th data element in La and assign it to ai
GetElem(La,i,ai);

ListInsert(Lc,++k,ai);
}
while(j<= Lb_len){

//Get the j th data element in Lb and assign it to bj
GetElem(Lb,j,bj);

ListInsert(Lc,++k,bj);
}
}
}
```

Posted by elementz on Sat, 24 Sep 2022 02:49:53 +0930