线性表的基本操作
1、初始化顺序表:void InitList(SqList &L);
2、顺序表插入操作:
bool ListInsert(SqList &L,int i,ElemType e);
3、按值查找:int LocateElem(SqList &L,ElemType e);
4、按位查找:int GetElem(SqList &L,int i);
5、删除操作:
bool ListDelete(SqList &L,int i,ElemType &e);
6、输出操作 :void PrintList(SqList &L);
7、判断表是否为空:int Empty(SqList &L);
SqList.h
#define CIRCLE_H
typedef int ElemType;
#define MaxSize 100 //表长度的初始定义
typedef struct{
ElemType *data;//指示动态分配数组的指针
int length;//当前长度和数组最大长度
}SqList;
//1、初始化顺序表
void InitList(SqList &L);
//2、顺序表插入操作
bool ListInsert(SqList &L,int i,ElemType e);
//3、按值查找
int LocateElem(SqList &L,ElemType e);
//4、按位查找
int GetElem(SqList &L,int i);
//5、删除操作
bool ListDelete(SqList &L,int i,ElemType &e);
//6、输出操作
void PrintList(SqList &L);
//7、判断表是否为空
int Empty(SqList &L);
SqList.cpp
#include <iostream>
#include "SqList.h"
//1、初始化顺序表
void InitList(SqList &L){
L.data = new ElemType[MaxSize];//为顺序表分配空间
//c: L.data =( ElemType*)malloc(sizeof( ElemType)*InitSize);
if(!L.data) printf("存储空间分配失败!");
L.length = 0;//空表长度为0
}
//2、顺序表插入操作
bool ListInsert(SqList &L,int i,ElemType e){
if(i<1||i>L.length+1) return false;//判断i的位置是否有效
if(L.length>=MaxSize) return false;//判断当前空间是否已满
//将i个元素及其后的所有元素后移一个位置
for(int j=i;j<=L.length;j++){
L.data[j]=L.data[j-1] ;
}
/*
for(int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1] ;
}
*/
L.data[i-1]=e;//将e放置到第i个位置
L.length++;//线性表的长度加一
return true;
}
//3、按值查找
int LocateElem(SqList &L,ElemType e){
int i;
for(i=1;i<=L.length;i++){
//下标为i-1的元素等于e,其位置为i
if(L.data[i-1]==e){
return i;
}
}
return 0;//查找失败
}
//4、按位查找
int GetElem(SqList &L,int i){
for(int k=0;k<L.length;k++){
if(k==i-1){
return L.data[k];
}
}
return 0;
}
//5、删除操作
bool ListDelete(SqList &L,int i,ElemType &e){
if(i<1||i>L.length) return 0;//判断i的位置是否有效
e=L.data[i-1];//将位置i的值赋值给e
for(int j=i;j<L.length;j++) {
L.data[j-1]=L.data[j];
}
L.length--;
return true;
}
//6、输出操作
void PrintList(SqList &L){
if(Empty(L)) printf("表为空!\n");
for (int k = 0; k < L.length; k++)
{
printf(" %d", L.data[k]);
}
printf("\n");
}
//7、判断表是否为空
int Empty(SqList &L){
if (L.length == 0)
{
return 1;
}
return 0;
}
main.cpp
#include <iostream>
using namespace std;
#include "SqList.h"
int main(int argc, char** argv) {
SqList L;//L为创建顺序表的名称
//1、初始化顺序表
InitList(L);
//2、插入操作
ListInsert(L,1,6);
ListInsert(L,2,7);
ListInsert(L,3,3);
ListInsert(L,4,1);
ListInsert(L,5,5);
ListInsert(L,6,6);
ListInsert(L,7,8);
ListInsert(L,8,2);
ListInsert(L,9,14);
ListInsert(L,10,6);
ListInsert(L,11,9);
printf("依次在表中插入元素:");
//6、输出操作
PrintList(L);
//3、按值查找,查找元素4在表中的位置
printf("元素1在表中的位置:%d\n",LocateElem(L,1));
//4、按位查找,查找表中位置2的元素值
printf("表中位置2的元素值:%d\n",GetElem(L,2));
//5、删除操作,删除L的第i个数据元素,并用e返回删除元素的值
int e;
ListDelete(L,2,e);
printf("表中删除第2个元素的值 %d\n",e);
printf("删除第2个数据元素后的L:");
PrintList(L);