/*
* @Author: Zero
* @Date: 2019-11-14
* @Filename:
* @Description: file content
* @version: V
* @Copyright: © 2019. All rights reserved.
*/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize]; //数组静态分配
int length;
} SqList;
/**
* @description: 1.初始化
*/
void InitList(SqList &L)
{
L.length = 0;
}
/**
* @description: 2.建立顺序表
* 给定的数据存放在数组a[]中,长度为n
*//*
int CreatList(SqList &L, ElemType a[], int n)
{
if (n > MaxSize)
{
printf("顺序表的空间不够,无法建表\n");
return 0;
}
for (int i = 0; i < n; i++)
{
L.data[i] = a[i];
}
L.length = n;
return 1;
}
*/
int CreatList(SqList &L){ //创建一个顺序表
printf("请输入你要插入顺序表的数:");
int i=0;
while(~scanf("%d",&L.data[i])){
i++;
L.length++;
if(getchar()=='\n')break;
}
return 0;
}
/**
* @description: 3.销毁表
* 静态存储分配,顺序表变量退出作用域时自动释放该变量所占用的内存
*/
/**
* @description: 4.判空操作
*/
int EmptyList(SqList &L)
{
if (L.length == 0)
{
return 1;
}
else
{
return 0;
}
}
/**
* @description: 5.求表长
*/
int LengthList(SqList &L)
{
return L.length;
}
/**
* @description: 6.打印遍历输出
*/
void PrintList(SqList &L)
{
for (int i = 0; i < L.length; i++)
{
printf("%2d", L.data[i]);
}
printf("\n");
}
/**
* @description: 7.插入
* @parameter: Elem
*/
bool InsertElem(SqList &L, int i, ElemType e)
{
if (i < 1 || i > L.length + 1)
{
printf("插入位置错误!");
return false;
}
if (L.length >= MaxSize)
{
printf("上溢:当前存储空间已满!");
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;
}
/**
* @description: 8.删除
* @parameter:
*/
bool DeleteElem(SqList &L, int i, ElemType &e)
{
if (i < 1 || i > L.length)
return false;
e = L.data[i - 1];
for (int j = i; j < L.length; j++)
L.data[j - 1] = L.data[j];
L.length--;
return true;
}
/**
* @description: 9.按值查找
* @parameter:
*/
bool LocateElem(SqList L, ElemType e)
{
int i;
for (int i = 0; i < L.length; i++){
if (L.data[i] == e){
return i + 1;
}
}
printf("查找不到...");
return false;
}
/**
* @description: 10.按位查找
* @parameter:
*/
bool GetElem(SqList L, int i, ElemType &e)
{
if (i < 1 || i > L.length)
{
printf("查找位置非法!");
return false;
}
else
{
e = *(L.data + i - 1);
return true;
}
}
/**
* @description: 11.更改数据
* @parameter:
*/
int ReviseSqList(SqList &L,int i,int e){
L.data[i-1]=e;
return 0;
}
int main()
{
SqList L;
InitList(L);
CreatList(L);
printf("*****************************\n");
printf("* 请输入你要进行的操作: *\n");
printf("* 1.读取顺序表中的内容 *\n");
printf("* 2.查找顺序表中是否存在某数*\n");
printf("* 3.增加顺序表中的数据 *\n");
printf("* 4.删除顺序表中的数据 *\n");
printf("* 5.修改顺序表中的数据 *\n");
printf("* 6.查询顺序表的表长值 *\n");
printf("*****************************\n");
int t;
int i,e,n;
while(~scanf("%d",&t)){
switch(t){
case 1:
PrintList(L);
break;
case 2:
printf("请输入你要查找的数:\n");
scanf("%d",&e);
n=LocateElem(L,e);
if(n!=-1){
printf("%d\n",n);
}
break;
case 3:
printf("请输入你要插入的位置和数:\n");
scanf("%d%d",&i,&e);
InsertElem(L,i,e);
break;
case 4:
printf("请输入要删除的位置:\n");
scanf("%d",&i);
DeleteElem(L,i,e);
break;
case 5:
printf("请输入要更改的位置和数据:\n");
scanf("%d%d",&i,&e);
ReviseSqList(L,i,e);
break;
case 6:
printf("该顺序表长为:");
n=LengthList(L);
printf("%d",n);
break;
case 0:
exit(0);
}
}
return 0;
}