顺序表
线性表的顺序存储结构。
优点是随机访问,即通过首地址和元素序号可在O(1)时间内存取元素、存储密度高。
缺点是插入删除要移动大量元素、必须占用大量连续空间。
代码
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define InitSize 100
//#define MaxSize 50
//静态分配
// typedef struct{
// int data[MaxSize];
// int length;
// }SQlist;
//动态分配
typedef struct{
int *data;
int MaxSize,length;
}Sqlist;
//插入元素
bool ListInsert(Sqlist &L,int i, int e){
if (i < 1 || i > L.length + 1)
return false;
if (L.length >= L.MaxSize)
return false;
for (int j = L.length; j >= i; j -- )
L.data[j] = L.data[j - 1];
L.data[i - 1] = e;
L.length ++;
return true;
}
//删除元素
bool ListDelete(Sqlist &L, int i, int &e){
if (i < 1 || i > L.length + 1)
return false;
e = L.data[i - 1];
for (int j = i; j < L.length; j ++ )
L.data[j - 1] = L.data[j];
L.length --;
return true;
}
//按值查找
int LocateElem(Sqlist L,int e){
for (int i = 0; i < L.length; i ++ )
if (L.data[i] == e)
return i + 1;
return 0;
}
void PrintList(Sqlist L){
for (int i = 0; i < L.length; i ++ ) cout << L.data[i] << ‘ ‘; cout << endl;
}
int main()
{
Sqlist L;
L.data = (int *)malloc(sizeof(int) * InitSize);
L.MaxSize = 1000;
int n;
cin >> n;
for (int i = 1; i <= n; i ++ )
{
int e;
cin >> e;
ListInsert(L,i,e);
}
PrintList(L);
int de;
ListDelete(L,3,de);
PrintList(L);
cout << "已删除元素:" << de << endl;
int se = 5;
cout << LocateElem(L,se);
return 0;
}
/*
5
1 2 3 4 5
*/