前言
*初学者一定要一行一行看!!!!,我相信你会学会的。
ok,上源码
如果哪里有错或者哪里不懂欢迎留言,我每天都在!
#include <iostream>
using namespace std;
#define maxsize 20 //自定以宏定义maxsize=20 他是一个常量
#define ok 1 //同上
#define error 0 //同上
typedef int Elemtype; //人话:定义Elemtype它是整型可以拿他当int用
class list {
public:
int data[maxsize];
int length; //当前长度
};
//查询操作
int getElem(list l,int i,Elemtype* e) {//格式:(链表长度L,获取位置i,获取元素的类型+变量名)
if (l.length = 0 || i<1 || i>l.length) {
return error;
}
*e = l.data[i - 1];
return ok;
}
//插入操作
int insert(list* L,int i,Elemtype e) {//e为要插入数据 可根据需要定义类型
int k;
if (L->length == maxsize) {//顺序线性表已经满了
return error;
}
if (i<1 || i>L->length + 1) {//i不在线性表的长度范围内
return error;
}
if (i <= L->length) {//符合要求
for (k = L->length - 1; k >= i - 1;k--) {
L->data[k+ 1] = L->data[k];
}
}
L->data[i - 1] = e;//将要插入的元素加进去
L->length++;
}
//删除操作
int dele(list* L, int i,Elemtype* e) {
int t;
if (i < 1 || i > L->length)
return error;
*e = L->data[i-1];
if (i <L->length) {
for (t = i; t <L->length ; t++) {
L->data[t - 1] = L->data[t];
}
}
L->length--;
return ok;
}
int main() {
list p;
p = { {1,2,3,4,5},10 };//为顺序表初始化数据(其中{1,2,3,4,5}就是顺序表里的数据,10代表他的当前长度)
cout << "遍历初始数据***********" << endl;
for (int j = 0; j < 5; j++) {
cout << p.data[j] << ",";
}
cout << endl << endl;
//删除表中第二个位置的数
cout << "删除位置为2后的结果:";
dele(&p,2,&p.data[2]);
for (int j = 0; j < 4; j++) {
cout << p.data[j] << ",";
}
cout << endl << endl;
insert(&p, 3, 9);
cout << "在位置3插入数据后的结果:";
//遍历(人话:把数组里所有数都打印出来)
for (int i = 0; i < 5; i++) {
cout << p.data[i]<<",";
}
cout << endl << endl;
}
//优点:1.无需为表中元素之间的逻辑关系而增加额外存储空间
// 2.可以快速存取表中任意位置的元素
//缺点:
// 1.插入和删除操作需移动大量元素
// 2.当线性表长度变化较大时,难以确定存储空间容量
// 3.容易造成存储空间的碎片。
版权声明:本文为JslientJ原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。