本博文源于王卓老师的《数据结构》,完整实现起来并不困难,但是要完整的测试需要对这些函数有一个大致的了解,因此,如果博文对你有帮助的话可以收藏。
1、线性表顺序存储结构
用指针为动态分配内存。
typedef struct{
ElementType *elem;
int length;
}SqList;
2、初始化线性表
线性表初始化主要在于分配内存空间以及长度置为0
Status InitList(SqList &L){
L.elem = new ElementType[MAXSIZE];
if(!L.elem) return ERROR;
L.length = 0;
return OK;
}
3、求线性表的长度
直接将L.length返回出去
int ListLength(SqList L){
return L.length;
}
4、 插入线性表元素
插入在i位置的话,那就将元素倒着往后移,最后length++
Status ListInsert(SqList &L,int i,ElementType e){
if(i<0 || i>L.length+1) return ERROR;
if(L.length == MAXSIZE) return ERROR;
for(int x = L.length-1;x>=i-1;x--){
L.elem[x+1] = L.elem[x];
}
L.elem[i-1] = e;
++L.length;
return OK;
}
5、删除线性表元素
删除指定位置元素,就是将后一个元素不断向前覆盖,最后–length;
Status ListDelete(SqList &L,int i){
if(i<1 || i>L.length) return ERROR;
for(int j =i;j<=L.length-1;j++){
L.elem[j-1]=L.elem[j];
}
--L.length;
return OK;
}
6、获得线性表指定位置元素
记得数组从下标0开始
Status GetElem(SqList L,int i,ElementType &e){
if(i<0 || i>L.length) return ERROR;
e = L.elem[i-1];
return OK;
}
7、对查找某元素
一个个进行遍历
int LocateElem(SqList L,ElementType e){
for(int i=0;i<L.length;i++){
if(L.elem[i] == e) return i+1;
}
return ERROR;
}
测试效果
完整代码
#include<iostream>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 10
using namespace std;
typedef int Status;
typedef int ElementType;
//线性表的顺序存储
typedef struct{
ElementType *elem;
int length;
}SqList;
Status InitList(SqList &L){
L.elem = new ElementType[MAXSIZE];
if(!L.elem) return ERROR;
L.length = 0;
return OK;
}
Status GetElem(SqList L,int i,ElementType &e){
if(i<0 || i>L.length) return ERROR;
e = L.elem[i-1];
return OK;
}
int LocateElem(SqList L,ElementType e){
for(int i=0;i<L.length;i++){
if(L.elem[i] == e) return i+1;
}
return ERROR;
}
//插入
Status ListInsert(SqList &L,int i,ElementType e){
if(i<0 || i>L.length+1) return ERROR;
if(L.length == MAXSIZE) return ERROR;
for(int x = L.length-1;x>=i-1;x--){
L.elem[x+1] = L.elem[x];
}
L.elem[i-1] = e;
++L.length;
return OK;
}
Status ListDelete(SqList &L,int i){
if(i<1 || i>L.length) return ERROR;
for(int j =i;j<=L.length-1;j++){
L.elem[j-1]=L.elem[j];
}
--L.length;
return OK;
}
int ListLength(SqList L){
return L.length;
}
int main(){
SqList L;
InitList(L);
cout << "after init,is L.length equal 0?:" << ListLength(L) << endl;
ListInsert(L,1,1);
ListInsert(L,2,2);
ListInsert(L,3,3);
ListInsert(L,4,4);
ListInsert(L,5,5);
cout << "After insert 5 element,L.length is 5?: " << ListLength(L) << endl;
ElementType e;
if(GetElem(L,2,e)==ERROR){
cout << "error"<< endl;
}else{
cout << "pos:2 element is :" << e << endl;
}
ListDelete(L,2);
cout << "delete one element,L.length is 4:" << ListLength(L) << endl;
LocateElem(L,3);
cout << "Get pos 3 element,pos is :" << e << endl;
return 0;
}