用c++写线性表的存储结构
时间: 2023-05-31 20:02:53 浏览: 51
线性表的存储结构可以用数组来实现。具体实现方法如下:
1. 定义一个结构体,包含线性表的元素和长度。
```
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
```
2. 初始化线性表,将长度设为0。
```
void InitList(SeqList *L) {
L->length = 0;
}
```
3. 插入元素,将要插入位置后面的元素依次后移,然后将新元素插入到空出来的位置。
```
bool InsertList(SeqList *L, int pos, int val) {
if (L->length == MAX_SIZE) {
return false; // 线性表已满,插入失败
}
if (pos < 1 || pos > L->length+1) {
return false; // 插入位置不合法,插入失败
}
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i-1]; // 后移元素
}
L->data[pos-1] = val; // 插入新元素
L->length++; // 长度加1
return true;
}
```
4. 删除元素,将要删除的元素后面的元素依次前移。
```
bool DeleteList(SeqList *L, int pos) {
if (pos < 1 || pos > L->length) {
return false; // 删除位置不合法,删除失败
}
for (int i = pos-1; i < L->length-1; i++) {
L->data[i] = L->data[i+1]; // 前移元素
}
L->length--; // 长度减1
return true;
}
```
5. 查找元素,遍历线性表,查找值为val的元素。
```
int SearchList(SeqList L, int val) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == val) {
return i+1; // 返回元素位置
}
}
return 0; // 没有找到,返回0
}
```
6. 输出线性表,遍历线性表,依次输出元素。
```
void PrintList(SeqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
```
7. 测试代码,进行插入、删除、查找、输出等操作。
```
int main() {
SeqList L;
InitList(&L);
InsertList(&L, 1, 1);
InsertList(&L, 2, 2);
InsertList(&L, 3, 3);
PrintList(L); // 输出:1 2 3
DeleteList(&L, 2);
PrintList(L); // 输出:1 3
int pos = SearchList(L, 3);
printf("pos=%d\n", pos); // 输出:2
return 0;
}
```