# 线性表

## 定义：

  废话不多说，开门见山。线性表是什么？线性表是具有相同数据类型的n个数据元素的有限序列。

  若用L命名线性表，则一般表示为：

$$
L = ( a1,a2,..,ai,ai+1,...,an)
$$

  a1 为表头元素，an为表尾元素；除第一个元素外，每个元素有且仅有一个直接前驱；除最后一个元素外，每个元素有仅有一个直接后继。

  注意：**线性表是一种逻辑结构，而后面讲的顺序表和链表是指存储结构，属于不同概念**。

## 基本操作：

  1）InitList（\&L）：初始化表

  2）Length（L）：求表长

  3）LocateElem（L, e）：按值查找操作

  4）GetElem（L, i ）：按位查找操作

  5）ListInsert（\&L，i，e）：插入操作

  6）ListDelete（\&L，i，e）：删除操作

  7）PrintList（L）：输出操作

  8）Empty（L）：判空操作

  9）DestoryList（L）：销毁操作

## 另外说明：

  **值传递，引用传递，指针传递**：

  1、值传递：

```cpp
void f(int x)
```

  传值传的是原来实参的一份拷贝，对形参进行操作不会改变实参的值。函数返回后，函数栈帧销毁，这份拷贝也会自动被回收。

  2、引用传递：

```cpp
void f(int& x)
```

  传引用什么也没创建，只是给实参起个别名，就像同学之间取外号一样，张三是一个同学，别人给他取名就二狗，那么张三，二狗就是同一个人。在这也是一样的，对引用进行操作就等于对实参的操作，对引用的操作会影响原来的实参。

  3、指针传递：

```cpp
void f(int* &x)
```

  如果传入的指针型变量，并且在函数体内要对传入的指针进行改变，则可以按照上述编写参数。

  传指针就是为实参传建一个指针变量，指针变量里面存的就是实参的地址，对形参进行操作也会通过指针的间接访问对实参进行修改，所以对形参的操作会影响原来的值。
