在线性表中
存在唯一的第一个元素和最后一个元素
除第一个元素外 其他元素有且仅有一个直接前驱, 第一个元素没有直接前驱
除最后一个元素外, 其他元素有且仅有一个直接后继 最后一个元素没有直接后继
线性表中元素和位置之间可以有关系 也可以没有关系
用顺序存储方式实现的线性表称为顺序表 它是用向量作为其存储结构的(即一维数组)
顺序表的静态存储结构:
extarea readonly="readonly" name="code" class="c++">
#include<iostream>
#include<stdlib.h>
#include<algorithm>
#define initSize 100 //初始大小
using namespace std;
typedef int dataType;
class seqList {
private:
dataType *data;
int maxSize, n; //已有数组和最大数组
public:
seqList() {
data = new dataType[initSize];
maxSize = initSize;
n = 0;
}
void clearList(); //清除顺序表
int Length(); //获取线性表长度
int isEmpty(); //判断表空否
int isFull(); //判断表是否已满
void add(dataType num);
void explore();
void insert(dataType num,int pos); //插入值
void Delete(dataType num);
//顺序表查找算法
int Search(dataType num); //查找
void Copy(seqList& L); //复制算法
void swap(dataType &a, dataType &b) {
dataType &temp = a;
a = b;
b = temp;
}
};
//清空列表
void seqList::clearList() {
delete data;
data = new dataType[initSize];
n = 0; //顺序表清空为0
}
//获取长度
int seqList::Length() {
return n;
}
//判断是否为空
int seqList::isEmpty() {
return(n == 0) ? 1 : 0; //返回值为0吗
}
//判断是否为满
int seqList::isFull() {
return(n == maxSize) ? 1 : 0; //返回最大值
}
//查找指定数字
int seqList::Search(dataType num) {
for (int i = 1; i <= n; ++i) {
if (data[i-1] == num) return i; //查找成功 返回值的位置
}
return 0;
}
//复制指定值
void seqList::Copy(seqList& L) { //将元素复制到指定列表
if (L.data) {
int size = this->n;
for (int i = 0; i < size; ++i) {
L.data[i] = this->data[i];
}
L.n = size;
}
}
//add值
void seqList::add(dataType num) {
this->data[n] = num;
this->n++;
}
//遍历
void seqList::explore() {
int size = this->n;
for (int i = 0; i < n; ++i) {
dataType obj = this->data[i];
cout << obj << " ";
}
cout << endl;
}
//插入值
void seqList::insert(dataType num, int pos) {
if (isFull()) {
cout << "the list is full!!" << endl;
return;
}
if (pos >= 0 && pos <= n) { //如果position符合范围的话
this->n++;
int i;
for (i = n; i > pos; --i) {
data[i + 1] = data[i];
}
data[i] = num;
}
}
//删除值
void seqList::Delete(dataType num) {
if (isEmpty()) {
cout << "the list is Empty!" << endl;
return;
}
if (Search(num) == 0) {
return;
}
int pos = Search(num) - 1;
for (int i = pos; i < n; ++i) {
data[i] = data[i + 1];
}
this->n--; //减少一位
}
int main() {
seqList myList;
seqList myList2;
myList.add(10);
myList.add(20);
myList.add(30);
myList.add(40);
myList.add(50);
int length = myList.Length();
cout << length << endl;
myList.Copy(myList2);
int length_2 = myList2.Length();
cout << length_2 << endl;
myList.insert(999, 5);
myList.Delete(1000);
myList.explore();
myList2.explore();
system("PAUSE");
return 0;
}
</textarea>
线性表的缺点:每次插入和删除都要移动元素 非常消耗内存