线性表的基本操作,静态分配实现:
#include <iostream>
#include <cstdio>
using namespace std;
#define MaxSize 50
typedef int Elemtpye;
//静态分配
typedef struct{
Elemtpye data[MaxSize];
int length;
}SqList;
//动态分配
//插入元素,i代表插入的位置,从0开始
bool ListInsert(SqList &L,int i,Elemtpye e){
if(i<0||i>L.length) //判断位置是否合法
return false;
if(L.length>MaxSize)
return false;
for(int j=L.length;j>=i;j--) //移动待插入位置及其以后的元素
L.data[j]=L.data[j-1];
L.data[i]=e;
L.length++; //顺序表长度加一
return true;
}
//删除使用元素e的引用目的是拿出对应的值
bool ListDelete(SqList &L,int i,Elemtpye &e){
if(i<0||i>=L.length) //如果删除位置不合法
return false;
e=L.data[i]; //获取顺序链表中对应元素,赋值给e
for(int j=i;j<L.length-1;j++)
L.data[j]=L.data[j+1];
L.length--; //删除一个元素,顺序表长度减1
return true;
}
//查找成功,返回位置,位置从0开始,查找失败,返回-1
int LocateElem(SqList L,Elemtpye e){
int i;
for(i=0;i<L.length;i++)
if(L.data[i]==e)
return i;
return -1;
}
//打印顺序链表
void Print(SqList L){
for(int i=0;i<L.length;i++)
printf("%d ",L.data[i]);
printf("\n");
}
int main()
{
SqList L; //顺序表名称
L.data[0]=1;
L.data[1]=2;
L.data[2]=3; //手动赋值
L.length=3; //顺序表长度
bool ret; //查看返回值
Elemtpye del; //要删除的元素
ret=ListInsert(L,2,9);
if(ret)
{
printf("插入成功!\n");
Print(L);
}
else
printf("插入失败!\n");
ret=ListDelete(L,1,del);
if(ret)
{
printf("删除成功!\n");
printf("删除的元素是:%d\n",del);
Print(L);
}
else
printf("删除失败!\n");
int s=LocateElem(L,3);
if(s!=-1)
{
printf("查找成功!\n");
printf("元素位置为:%d\n",s);
}
else{
printf("查找失败!\n");
}
return 0;
}