参考书:《数据结构(C语言版|第2版)》严蔚敏 李冬梅 吴伟民 编著
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,其特点是,逻辑上相邻的数据元素,其物理次序也是相邻的。
数据结构学的比较菜,然后准备重新学一下,这里主要为了记录一下这个过程
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
using namespace std;
int MAXSIZE =100;
typedef int ElemType;
typedef struct
{
int* arr; //顺序表存的值
int length; //长度
} SqList;
//初始化
int IntList(SqList &L)
{
L.arr=new ElemType[ MAXSIZE]; //分配数组空间
if(L.arr==NULL)
{
printf("初始化失败");
return 0;
}
L.length=0;
return 1;
}
//插入数据
int ListInsert(SqList &L,int i,ElemType e)
{
int j;
if((i<1)||i>L.length+1)
{
printf("插入越界");
return -1;
}
if(L.length==MAXSIZE)
{
printf("当前存储空间已满,无法插入");
return -1;
}
for (j=L.length-1;j>=i-1;j--)
L.arr[j+1]=L.arr[j];
L.arr[i-1]=e;
++L.length;
return 0;
}
//顺序表取值
int GetElem(SqList L,int i)
{
if(i<1||i>L.length)
{
printf("查询越界");
return -1;
}
int e;
e=L.arr[i-1];
return e;
}
//查找
int LocateElem(SqList L,ElemType e)
{
for (int i=0;i<L.length;i++)
if(L.arr[i]==e)
return i+1;// 查询成功返回序号
return -1;
}
//删除
int ListDelete(SqList &L,int i)
{
if(i<1||i>L.length)
{
printf("删除失败\n");
return -1;
}
for(int j=i;j<=L.length-1;j++)
L.arr[j-1]=L.arr[j];
--L.length;
return 0;
}
//清空线性表
void ListClear(SqList &L)
{
if(L.arr)
L.length=0;
}
//销毁线性表
void ListDestroy(SqList &L)
{
if(L.arr)
{
free(L.arr);
L.length=0;
L.arr=NULL;
printf("线性表已销毁\n");
}
}
//打印
int ListPrint(SqList L)
{
printf("打印整个线性表:");
if(!L.arr)
{
printf("线性表为空 ,打印失败");
return 0;
}
for (int i=0;i<L.length;i++)
printf("%d ",L.arr[i]);
printf("\n");
}
int main()
{
SqList L;
IntList(L);
ListInsert(L,1,1);
ListInsert(L,2,2);
ListInsert(L,3,3);
printf("取值:第1号元素为:%d\n",GetElem(L,1));
printf("查询:元素2的结果为:%d\n",LocateElem(L,2));
//删除
ListDelete(L,1);
//打印
ListPrint(L);
ListDestroy(L);
ListPrint(L);
return 0;
}