#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
int * elem;
int length;
}SqList;
/*顺序表的初始化*/
int InitList(SqList &L)
{
L.elem = new int[MAXSIZE];
if (!L.elem) return 0;//如果分配内存失败就返回0
L.length = 0;
return 1;
}
/*根据位置取值*/
int GetElem(SqList L, int i, int &e)
{
if (i<1 || i>L.length)
{
printf("所选的位置越界!!\n");//判断位置是否合法
return -1;
}
e = L.elem[i - 1];
return e;
}
/*根据元素的值查找位置*/
int LocateElem(SqList L, int e)
{
for (int i = 0; i < L.length; i++)
{
if (L.elem[i] == e) return i + 1;//顺序表中有这样的元素存在,返回元素的位置
}
return -1;
}
/*顺序表插入元素*/
void ListInsert(SqList &L, int i, int e)
{
if ((i<1) || (i>L.length + 1))
{
printf("插入的位置不合法!!\n");
return ;
}
if (L.length == MAXSIZE)
{
printf("当前存储空间已满!!\n");
return;
}
for (int j = L.length - 1; j >= i - 1; j--)
{
L.elem[j + 1] = L.elem[j];
}
L.elem[i - 1] = e;
++L.length;
printf("插入成功!!\n");
return;
}
/*顺序表删除元素*/
void ListDelete(SqList &L, int i)
{
if ((i<1) || (i>L.length))
{
printf("输入的位置不合法!!\n");
}
for (int j = i; j <= L.length - 1; j++)
{
L.elem[j - 1] = L.elem[j];
}
--L.length;
printf("删除元素成功!!\n");
return;
}
/*清空顺序表*/
void ListEmpty(SqList &L)
{
if (L.length == 0)
{
printf("顺序表为空!!\n");
return;
}
else
{
for (int i = L.length - 1; i >= 0; i--)
{
--L.length;
}
if (L.length == 0)
{
printf("顺序表已经被清空!!\n");
return;
}
}
}
/*打印顺序表*/
void print(SqList L)
{
if (L.length == 0)
{
printf("顺序表中无元素!!\n");
}
else
{
for (int i = 0; i < L.length; i++)
{
printf("%-4d", L.elem[i]);
}
printf("\n");
}
}
int main()
{
SqList L;
//初始化顺序表
if (InitList(L))
{
printf("初始化成功!!\n");
}
else
{
printf("初始化失败!!\n");
}
print(L);
for (int i = 1; i <= 10; i++)
{
ListInsert(L, i, i);
}
print(L);
int location = 0;
int value = 0;
//根据位置查询元素的数值
printf("请输入你要查询的位置:");
scanf("%d", &location);
printf("你所要查找的元素数值为:%d\n", GetElem(L, location, value));
//根据元素的值查找元素的位置
printf("请输入你要查找元素的值:");
scanf("%d", &value);
if (LocateElem(L, value) == -1)
{
printf("你所要查找的元素不存在!!\n");
}
else
{
printf("你所要查找的元素的位置为: %d\n", LocateElem(L, value));
}
//插入元素
printf("输入你所要插入的位置以及元素的数值:");
scanf("%d %d", &location, &value);
ListInsert(L, location, value);
print(L);
//删除元素
printf("请输入你要删除的元素的位置:");
scanf("%d", &location);
ListDelete(L, location);
print(L);
//清空顺序表
ListEmpty(L);
system("pause");
return 0;
}