前言
最近在做一些考研题目,发现有些同学不会去实现数据结构的代码,我就将李春葆老师的数据结构第5版中的算法实现了一些基础的功能给同学们参考,大家可以在此基础上实现新的功能并验证,代码可以直接运行,编译器我用的是dev C++.
顺序表基本算法实现
//参考书籍:李春葆数据结构教程第5版
#include<iostream>
#include<cstdlib>
using namespace std;
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;//结构体定义
void CreateList(SqList *&L,ElemType a[],int n)//创建顺序表
{
int i=0,k=0;
L=(SqList*)malloc(sizeof(SqList));
while(i<n)
{
L->data[i]=a[i];
k++;
i++;
}
L->length=k;
}
void InitList(SqList *&L)//初始化顺序表
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
void DestroyList(SqList *&L)//销毁顺序表
{
free(L);
}
bool ListEmpty(SqList *L)//判空
{
return (L->length==0);
}
int ListLength(SqList *L)//返回长度
{
return L->length;
}
void DispList(SqList *L)//输出线性表
{
for(int i=0;i<L->length;i++)
{
printf("%d ",L->data[i]);
}
printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)//求线性表中第i个位置的元素值
{
if(i<1||i>L->length) return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList *L,ElemType e)//定位e的位置
{
int i=0;
while(i<L->length&&L->data[i]!=e) i++;
if(i>=L->length) return false;
else return i+1;//物理位序转化为逻辑位序
}
bool ListInsert(SqList *&L,int i,ElemType e)//在第i个位置插入元素e
{
int j;
if(i<1||i>L->length+1) return false;
i--;//物理位序转化为逻辑位序
for(j=L->length;j>i;j--)//整体后移
{
L->data[j]=L->data[j-1];
}
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)//删除第i个元素
{
int j;
if(i<1||i>L->length) return false;
i--;
e=L->data[i];
for(j=i;j<L->length;j++)
{
L->data[j]=L->data[j+1];
}
L->length--;
return true;
}
int main()
{
SqList *L;
ElemType e;
int a[]={1,2,3,4,5};
InitList(L);
CreateList(L,a,5);
DispList(L);
ListEmpty(L)==0?cout<<"not null"<<endl:cout<<"null"<<endl;
cout<<ListLength(L)<<endl;
GetElem(L,3,e);
cout<<e<<endl;
cout<<LocateElem(L,3)<<endl;
ListInsert(L,6,6);
DispList(L);
ListDelete(L,3,e);
DispList(L);
DestroyList(L);
return 0;
}