顺序表的基本操作 (2)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
顺序表的基本操作
/*sqList.h 文件*/
#define LIST_INIT_SIZE 50 /*初始分配的顺序表长度*/
#define INCREM 10 /*溢出时,顺序表长度的增量*/
#define OVERFLOW 1
#define OK 0
#define ERROR -1
typedef int ElemType; /*定义表元素的类型*/
typedef struct SqList{
ElemType *elem; /*存储空间的基地址*/
int length; /*顺序表的当前长度*/
int listsize; /*当前分配的存储空间*/
}SqList;
/*sqListOp.h 文件*/
#include "Sqlist.h"
int InitList_sq(SqList &L); //顺序表创建函数定义
void FreeList_sq(SqList &L); //顺序表销毁函数定义
int ListInsert_sq(SqList &L, int i, ElemType e); //在顺序表的位置i插入元素e
void PrintList_sq(SqList &L); //遍历并输出顺序表所有元素
int ListDelete_sq(SqList &L, int i,ElemType &e); //删除顺序表第i个元素的
bool ListEmpty(SqList &L); //判断顺序表是否为空
int LocateElem_sq(SqList L,ElemType e); //在顺序表里查找出第1个与e相等的数据元素位置//已知线性表La和Lb的元素按值非递减排列
//归并后的La和Lb得到新的顺序线性表Lc,Lc的元素也是按值非递减排列
void MergeList_sq(SqList La,SqList Lb, SqList &Lc);
/*sqListOp.cpp文件*/
#include
#include
#include
#include "sqlistOp.h"
//创建顺序表
int InitList_sq(SqList &L) {
L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L.elem) exit(OVERFLOW); /*初始化失败,返回0*/
L.length = 0; /*置空表长度为0*/
L.listsize = LIST_INIT_SIZE; /*置初始空间容量*/
return OK; /*初始化成功,返回1*/
//销毁顺序表
void FreeList_sq(SqList &L){
if (L.elem)
free(L.elem);
printf("完成链表内存销毁\n");
}
//在顺序表的第i个位置之前插入新元素
int ListInsert_sq(SqList &L, int i, ElemType e){
int k;
if (i<1 || i>L.length + 1) return ERROR; /*插入位置不合法*/
if (L.length >= L.listsize){ /*存储空间满,重新分配空间*/
L.elem = (ElemType*)realloc(L.elem, (LIST_INIT_SIZE + INCREM)*sizeof(ElemType));
if (!L.elem) return OVERFLOW; /*存储分配失败*/
L.listsize += INCREM; /*修改存储空间大小*/
}
for (k = L.length - 1; k >= i - 1; k--){ /*插入位置之后元素后移*/
L.elem[k + 1] = L.elem[k];
}
L.elem[i - 1] = e; /*插入元素*/
L.length++; /*顺序表长度加1*/
return OK;
}/*ListInsert*/
//遍历并输出顺序表所有元素
void PrintList_sq(SqList &L){
if (!L.elem)
return;
int i = 0;
for (i = 0; i < L.length; i++)
printf("第[%d]元素= [%d]\n", i, L.elem[i]);
}
//删除顺序表第i个位置的元素
int ListDelete_sq(SqList &L, int i,ElemType &e){
int k;
if (i<1 || i>L.length) return ERROR; /*删除位置不合法*/
e = L.elem[i-1];
for (k = i - 1; k L.elem[k] = L.elem[k + 1]; L.length--; /*顺序表长度减1*/ return OK; } //在顺序表里查找出第1个与e相等的数据元素位置 int LocateElem_sq(SqList L,ElemType e){