#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
typedef int ElemType; //顺序表中元素类型
//静态分配
typedef struct
{
ElemType data[MaxSize]; //定义的数组,用来存元素
int length; //当前顺序表中有多少元素
}SqList;
//
//#define InitSize 100
动态分配
//typedef struct
//{
// ElemType * data; //指示动态分配数组的指针
// int length; //顺序表当前长度
// int MaxSize;//顺序表的最大容量
//} SqList;
初始化顺序表
//void InitList(SqList &L) {
// L.data = (ElemType *)malloc(InitSize * sizeof(ElemType));
// L.length = 0;
// L.MaxSize = InitSize;
//插入元素,在位序i的位置插入元素e
bool ListInsert(SqList& L, int i, ElemType e)
{
if(i<1 ||i>L.length+1)
{
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-1] = e;
L.length++;
return true;
}
//删除操作,删除位序i个位置上的元素,e是删除的元素
bool ListDelete(SqList& L, int i, ElemType &e)//删除使用元素e的引用是为了拿出对应的值
{
if(i<1 ||i>L.length)//删除位置是不合法的
{
return false;
}
if(L.length == 0) //顺序表中没有元素,无需删除
{
return false;
}
e = L.data[i-1];
for(int j = i;j<L.length; j++) //从I的位置依次把元素向前覆盖
L.data[j-1] = L.data[j];
L.length--;
return true;
}
//查找第一个元素值等于e的元素,并返回其位序
int LocatElem(SqList L,ElemType e)
{
int i;
for(i=0;i<L.length;i++)
{
if(L.data[i]==e)
{
return i+1;
}
}
return 0;
}
// 打印顺序表函数
void PrintList(SqList L)
{
for(int i = 0;i < L.length;i++)
{
printf("%-3d",L.data[i]);//要求所有元素打印到到一排
}
printf("\n");
}
int main()
{
SqList L; //顺序表的类型
bool ret; //查看返回值,
ElemType del; //用来存要删除的元素
L.data[0]=1;
L.data[1]=2;
L.data[2]=3;
L.length = 3;
// 第二个位置插入60 ,打印成功的顺序表
ret = ListInsert(L, 2, 60);
if(ret)
{
printf("插入成功\n");
PrintList(L);
}
else
{
printf("插入失败\n");
}
//删除第一个位置元素,并把元素值输出
ret = ListDelete(L, 2, del);
if(ret)
{
printf("删除成功\n");
printf("删除元素值为%d\n",del);
PrintList(L);
}
else
{
printf("删除失败\n");
}
//查找第一个元素值等于60的元素,并打印其位序
int elem_pos;
elem_pos=LocatElem(L,60);
if(elem_pos)
{
printf("查找成功\n");
printf("查找位置为%d\n",elem_pos);
}
else
{
printf("查找失败\n");
}
return 0;
}
C语言实现数据结构顺序表
最新推荐文章于 2024-07-08 21:10:38 发布