线性表之顺序表(C/C++)
1.表的基本操作
引入:
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
#define ElemType int
线性表的创建内容:创 销 增 删 改 查
表的结构体说明:
typedef struct {
ElemType *data;
int MaxSize;
int length;
}SeqList;
//表的初始化
void InitList(SeqList &L)
//表的插入
bool ListInsert(SeqList &L,int i,int e)
//表的删除
bool ListDelete(SeqList &L,int i,int &e)
//表的查找 按位查找
ElemType GetElem(SeqList L,int i)
//表的查找 按值查找
int LocateElem(SeqList L,ElemType e)
//表的初始化 赋值
void InitListAndData(SeqList &L,ElemType data[],int size)
//表的打印
void ListShow(SeqList &L)
//增加表的大小
void IncreaseSize(SeqList &L,int length)
2.表的基本操作代码
//表的初始化 赋值
void InitList(SeqList &L){
//用malloc函数申请一片连续的存储空间
L.data=(int*)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
//增加动态数组的长度
void IncreaseSize(SeqList &L,int length){
int *pInt=L.data;
L.data=(int*)malloc((L.MaxSize+length)*sizeof(int));
for (int i = 0; i <L.length ; i++) {
L.data[i]=pInt[i];
}
L.MaxSize=L.MaxSize+length;
free(pInt);
}
//在位序i处插入元素e
bool ListInsert(SeqList &L,int i,int e){
//加入判断 使程序更为健壮
if (i<1||i>L.length+1)
return false;
if (L.length>=L.MaxSize)
return false;
for (int j = i; j <L.length ; j++) {
L.data[j]=L.data[i-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
//顺序表的删除 并返回e的值
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;
}
//顺序表的按位查找
ElemType GetElem(SeqList L,int i){
return L.data[i-1];
}
//顺序表的按值查找
//顺序表L中查找第一个元素值等于e的元素 并返回其位序
int LocateElem(SeqList L,ElemType e){
for (int i = 0; i <L.length ; i++) {
if (L.data[i]==e) {
return i + 1;
}
}
return 0;
}
void InitListAndData(SeqList &L,ElemType data[],int size){
for (int i = 0; i <size ; i++) {
L.data[i]=data[i];
L.length++;
}
}
//输出表的数据
void ListShow(SeqList &L){
printf("==============================\n");
printf("The data of the Linear are:\n");
for (int i = 0; i <L.length ; i++) {
printf("%d ",L.data[i]);
}
printf("\n");
printf("==============================\n");
}
3.主函数
int main(){
ElemType dataList[]={5,2,3,4,7};
ElemType e,p;
SeqList seqList;
InitList(seqList);
//赋值
InitListAndData(seqList,dataList,5);
//删除
if(ListDelete(seqList,4,e))
printf("The node'data which was deleted is %d\n",e);
// IncreaseSize(seqList,5);
//查询
ListShow(seqList);
//插入
if (ListInsert(seqList,3,3))
printf("cut in node successfully !\n");
else
printf("Fail to cut in node !\n");
ListShow(seqList);
return 0;
}
4.运行结果
5.完整代码
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
#define ElemType int
typedef struct {
ElemType *data;
int MaxSize;
int length;
}SeqList;
void InitList(SeqList &L){
//用malloc函数申请一片连续的存储空间
L.data=(int*)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
//增加动态数组的长度
void IncreaseSize(SeqList &L,int length){
int *pInt=L.data;
L.data=(int*)malloc((L.MaxSize+length)*sizeof(int));
for (int i = 0; i <L.length ; i++) {
L.data[i]=pInt[i];
}
L.MaxSize=L.MaxSize+length;
free(pInt);
}
//在位序i处插入元素e
bool ListInsert(SeqList &L,int i,int e){
//加入判断 使程序更为健壮
if (i<1||i>L.length+1)
return false;
if (L.length>=L.MaxSize)
return false;
for (int j = i; j <L.length ; j++) {
L.data[j]=L.data[i-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
//顺序表的删除 并返回e的值
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;
}
//顺序表的按位查找
ElemType GetElem(SeqList L,int i){
return L.data[i-1];
}
//顺序表的按值查找
//顺序表L中查找第一个元素值等于e的元素 并返回其位序
int LocateElem(SeqList L,ElemType e){
for (int i = 0; i <L.length ; i++) {
if (L.data[i]==e) {
return i + 1;
}
}
return 0;
}
void InitListAndData(SeqList &L,ElemType data[],int size){
for (int i = 0; i <size ; i++) {
L.data[i]=data[i];
L.length++;
}
}
//输出表的数据
void ListShow(SeqList &L){
printf("==============================\n");
printf("The data of the Linear are:\n");
for (int i = 0; i <L.length ; i++) {
printf("%d ",L.data[i]);
}
printf("\n");
printf("==============================\n");
}
int main(){
ElemType dataList[]={5,2,3,4,7};
ElemType e,p;
SeqList seqList;
InitList(seqList);
//赋值
InitListAndData(seqList,dataList,5);
//删除
if(ListDelete(seqList,4,e))
printf("The node'data which was deleted is %d\n",e);
// IncreaseSize(seqList,5);
//查询
ListShow(seqList);
//插入
if (ListInsert(seqList,3,3))
printf("cut in node successfully !\n");
else
printf("Fail to cut in node !\n");
ListShow(seqList);
return 0;
}