顺序表的实现
静态分配
#include <iostream>
#define MaxSize 10
using namespace std;
typedef struct {
int data[MaxSize];
int length;
} SqList;
void InitList(SqList &L) {
for (int i = 0; i < MaxSize; ++i) {
L.data[i] = 0;
}
L.length = 0;
}
int main() {
SqList L;
InitList(L);
}
动态分配
#include <iostream>
#define InitSize 10
using namespace std;
typedef struct {
int *data;
int MaxSize;
int length;
} SqList;
void InitList(SqList &L) {
L.data = (int *) malloc(InitSize * sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
//增加动态数组长度
void IncreaseSize(SqList &L, int len) {
int *p = L.data;
L.data = (int *) malloc((InitSize + len) * sizeof(int));
for (int i = 0; i < L.length; ++i) {
L.data[i] = p[i];
}
L.MaxSize += len;
free(p);
}
int main() {
SqList L;
InitList(L);
}
顺序表的插入删除
#include <iostream>
#define MaxSize 10
using namespace std;
typedef struct {
int data[MaxSize];
int length;
} SqList;
void InitList(SqList &L) {
for (int i = 0; i < MaxSize; ++i) {
L.data[i] = 0;
}
L.length = 0;
}
bool ListInsert(SqList &L,int i,int e){
if (i<1||i>L.length)
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)
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 main() {
SqList L;
InitList(L);
ListInsert(L,3,3);
int e=-1;
if (ListDelete(L,3,e))
cout<<"delete success:"<<e<<endl;
else
cout<<"delete failed";
}
顺序表的查找
分为按序查找和按值查找两种
#include <iostream>
#define MaxSize 10
using namespace std;
typedef struct {
int data[MaxSize];
int length;
} SqList;
void InitList(SqList &L) {
for (int i = 0; i < MaxSize; ++i) {
L.data[i] = 0;
}
L.length = 0;
}
bool ListInsert(SqList &L,int i,int e){
if (i<1||i>L.length)
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)
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 GetElem(SqList L,int i){
return L.data[i-1];
}
int LocateElem(SqList L,int e){
for (int i = 0; i < L.length; ++i) {
if (L.data[i]==e)
return i+1;
}
}
int main() {
SqList L;
InitList(L);
ListInsert(L,3,3);
int e=-1;
if (ListDelete(L,3,e))
cout<<"delete success:"<<e<<endl;
else
cout<<"delete failed";
}
总结
静态分配方式
#include <iostream>
#define MaxSize 10
using namespace std;
typedef struct {
int data[MaxSize];
int length;
} SeqList;
void InitList(SeqList &L, int len) {
if (len > MaxSize) {
cout << "超出最大容量限制";
return;
}
for (int i = 0; i < len; ++i) {
cout << "请输入数:";
cin >> L.data[i];
}
L.length = len;
}
void output(SeqList &L) {
for (int i = 0; i < L.length; ++i) {
cout << L.data[i] << " ";
}
cout << endl;
}
bool ListInsert(SeqList &L, int i, int e) {
if (i < 1 || i > L.length)
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(SeqList &L, int i, int &e) {
if (i < 1 || i > L.length)
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 GetElem(SeqList &L, int i) {
return L.data[i - 1];
}
int LocateElem(SeqList &L, int e) {
for (int i = 0; i < L.length; ++i) {
if (L.data[i] == e)
return i + 1;
}
}
int main() {
SeqList L;
int len;
cout << "请输入待输入的数的数量:";
cin >> len;
InitList(L, len);
int i, e, find;
while (1) {
cout << "1.插入数据 2.删除数据 3.输出 4.按序查找 5.按值查找 6.退出" << endl;
cout << "请选择操作:";
int op;
cin >> op;
switch (op) {
case 1:
cout << "请输入插入位置和元素:";
cin >> i >> e;
if (ListInsert(L, i, e))
cout << "插入成功" << endl;
else
cout << "插入失败" << endl;
break;
case 2:
e = -1;
cout << "请输入要删除的元素位置:";
cin >> i;
if (ListDelete(L, i, e))
cout << "删除成功" << endl;
else
cout << "删除失败" << endl;
break;
case 3:
output(L);
break;
case 4:
cin >> i;
find = GetElem(L, i);
cout << find << endl;
break;
case 5:
cin >> e;
find = LocateElem(L, e);
cout << find << endl;
break;
case 6:
exit(0);
}
}
}