#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
#define OK 1
#define ERROR 0
#define true 1
typedef int Status;
typedef int DataType;
typedef struct {
DataType *Element;
int Length;
}List;
//
Status InitList(List *L) ; //顺序表初始化
Status DestoryList(List *L); //销毁顺序表
Status InputList(List *L); //输入顺序表
Status Find_Position(List *L); //查找(2), 按位置查找
Status Find_Value(List *L) ;//查找(1), 按值查找
Status TraverList(List *L); //遍历顺序表
Status Delete_Value(List *L) ;//按值删除
Status Delete_Position(List *L);//按位置删除
Status Reverse_List(List *L); //顺序表逆置
Status Revise_Position(List *L); //按位置修改
Status Revise_Value(List *L); //按值修改
//
Status InitList(List *L)//顺序表初始化
{
List *p=L;
p->Element=(DataType*)malloc(sizeof(MAXSIZE));
// printf("\n1\n");
//if(!p->Element)
//exit(OVERFLOW);
// printf("\n2\n");
p->Length=-1;
// printf("\n3\n");
return OK;
}
Status DestoryList(List *L) //销毁顺序表
{
if(L->Element==NULL||L==NULL)
{
printf("\n顺序表已经为空!\n");
return ERROR;
}
else
{
printf("\n\n");
free(L->Element);
//printf("\n释放L->Element\n");
L->Element=NULL;
//printf("\nL->Element==NULL\n");
L=NULL;
//printf("\nL==NULL\n");
//printf("释放成功!\n");
return OK;
}
}
Status InputList(List *L)//输入顺序表
{
printf("\n请元素个数\n");
int n;
scanf("%d", &n);
printf("\n输入元素的值:\n");
for(int i=0; i<n; i++)
{
scanf("%d", &L->Element[i]);
L->Length++;
}
printf("\n输出此顺序表!\n");
int s= TraverList(L);
return OK;
}
Status TraverList(List *L) //遍历顺序表
{
// printf("\n输出此顺 序表!\n");
//if(L!=NULL)
if(L->Length==-1)
{
printf("\n当前顺序为空表\n");
return ERROR;
}
//printf("\n\n输出此顺序表!\n");
for(int i=0; i<=L->Length; i++)
printf("%d ", L->Element[i]);
return OK;
}
Status Find_Value(List *L) //查找(1), 按值查找
{
int e=0, flag=0, x=0;
printf("\n当前顺序表为:\n");
int s= TraverList(L);
printf("\n请输入要查的数值:\n");
scanf("%d", &e);
for(int i=0; i<=L->Length; i++)
if(e==L->Element[i])
{
printf("L->Element[i]==%d:\n", L->Element[i]);
printf("L->Length===%d:\n", L->Length);
x=i;
flag=1;
}
if(flag==0)
{
printf("\n输入的数据不再顺序表中!\n");
return ERROR;
}
else
{
printf("\n%d是顺序表的第%d个元素\n", e, x+1);
return OK;
}
}
Status Find_Position(List *L) //查找(2), 按位置查找
{
int p=0, e=0, x=0, flag=0;
printf("\n当前顺序表为:\n");
int s= TraverList(L);
if(L->Length==-1)
printf("\n当前为空表,不执行查找!]n");
printf("\n\n请输入要查找的位置!\n");
scanf("%d", &p);
if(p<1||p>L->Length+2)
{
printf("\n位置输入不合法!\n");
return ERROR;
}
for(int i=0; i<=L->Length; i++)
{
if(p==i+1)
{
x=i;
e=L->Element[i];
flag=1;
}
}
if(flag==1)
{
printf("第%d个元素是%d", x+1, e);
return OK;
}
else
return ERROR;
}
Status InsertList_Position(List *L) //按位置插入顺序表
{
int p=0,e=0;
printf("\n\n请输入要插入的位置\n\n");
scanf("%d", &p);
if(p<1||p>L->Length+2)
{
printf("\n输入不合法!\n");
return ERROR;
}
printf("\n\n请输入要插入的数值\n\n");
scanf("%d", &e);
printf("\n插入后的数值为:\n");
int s1= TraverList(L);
for(int i=L->Length; i>=p-1;i--)
{
L->Element[i+1]=L->Element[i];
}
L->Element[p-1]=e;
L->Length++;
printf("\n插入后的数值为:\n");
int s2= TraverList(L);
return OK;
}
Status Delete_Value(List *L) //按值删除
{
int e=0, flag=0,x=0;
printf("\n当前顺序表为\n");
int s1=TraverList(L);//遍历顺序表
printf("\n输入要删除的数值\n");
scanf("%d", &e);
for(int i=0; i<=L->Length;i++)
{
if(L->Element[i]==e)
{
x=i;
flag=1;
}
}
if(flag==1)
{
printf("删除后的顺序表为\n");
for(int i=x; i<=L->Length;i++)
L->Element[i]=L->Element[i+1];
L->Length--;
int s2=TraverList(L);//遍历顺序表
return OK;
}
else
return ERROR;
}
Status Delete_Position(List *L) //按位置删除
{
int p=0;
printf("\n当前顺序表为\n");
int s1=TraverList(L);//遍历顺序表
printf("\n输入要删除的元素的位置\n");
scanf("%d", &p);
if(p<1||p>L->Length+2)
{
printf("\n输入有误!\n");
return ERROR;
}
else
{
printf("删除后的顺序表为\n");
for(int i=p-1; i<=L->Length; i++)
L->Element[i]=L->Element[i+1];
L->Length--;
int s2=TraverList(L);//遍历顺序表
return OK;
}
}
Status Sort_List(List *L) //排序
{
if(L->Length==-1)
{
printf("\n当前表顺序表为空无法排序\n");
return ERROR;
}
printf("\n请选择排序方式\n");
printf("1.从小到大排序");
printf("\n2.从大到小排序\n");
int n;
printf("\n请输入操作:\n");
scanf("%d", &n);
if(n==1)
{
int Tmp;
printf("\n当前顺序表\n");
int s0=TraverList(L);
for(int i=0;i<=L->Length;i++)
for(int j=0;j<=L->Length;j++)
if(L->Element[i] < L->Element[j])
{
Tmp=L->Element[i];
L->Element[i]=L->Element[j];
L->Element[j]=Tmp;
}
printf("\n从小到大排序后的顺序表\n");
int s1=TraverList(L);
}
if(n==2)
{
int Tmp;
printf("\n从大到小排序前的顺序表\n");
int s0=TraverList(L);
for(int i=0;i<=L->Length;i++)
for(int j=0;j<=L->Length;j++)
if(L->Element[i] > L->Element[j])
{
Tmp=L->Element[i];
L->Element[i]=L->Element[j];
L->Element[j]=Tmp;
}
printf("\n从大到小排序后的顺序表\n");
int s1=TraverList(L);
}
return OK;
}
Status Reverse_List(List *L) //顺序表逆置
{
printf("\n当前顺序表\n");
int s1=TraverList(L);
//顺序表实现逆置
int Tmp=0, p=L->Length;
for(int i=0;i<=p/2;i++, p--)
{
Tmp=L->Element[i];
L->Element[i]=L->Element[p];
L->Element[p]= Tmp;
}
printf("\n逆置后的顺序表\n");
int s=TraverList(L);
return OK;
}
Status Revise_Position(List *L) //按位置修改
{
printf("\n修改前顺序表为:\n");
int s=TraverList(L);
printf("请输入要替换元素位置");
int p;
scanf("%d", &p);
if(p<1||p>L->Length+2)
{
printf("\n位置输入有误!\n");
return ERROR;
}
else{
printf("\n请输入新值:\n");
int e=0;
scanf("%d", &e);
for(int i=0; i<=L->Length;i++){
if(i==p-1)
{
L->Element[i]=e;
}
}
printf("\n修改后顺序表为:\n");
int s1=TraverList(L);
return OK;
}
}
Status Revise_Value(List *L) //按值修改
{
int x=0, e=0, flag=0,q=0;
printf("当前顺序表为:\n");
int s1= TraverList(L) ;
printf("\n请输入要修改的数值:\n");
scanf("%d", &x);
for(int i=0; i<=L->Length;i++)
{
if(L->Element[i]==x)
{
//L->Element[i]=e;
flag=1;
q=i;
}
}
if(flag==0)
{
printf("\n查找不到要修改的值,输入有误!\n");
return ERROR;
}
else{
printf("\n请输入新值:\n");
scanf("%d", &e);
for(int i=q; i<=L->Length;i++)
{
if(L->Element[i]==x)
{
L->Element[i]=e;
flag=1;
}
}
int ss=TraverList(L);
return OK;
}
}
int main()
{
List L;
int s1=0,s2=0;
printf("\t\t***************************************************************");
printf("\n账号登陆:");
printf("\n");
printf("\n请输入管理员账号:\n");
printf("\n");
scanf("%d", &s1);
printf("\n请输入管理员密码\t\tn");
printf("\n");
scanf("%d", &s2);
if(s1==123&&s2==123)
{
printf("密码正确正在加载系统");
int i;
while(i<1000000)
{
if(i%100==0)
{
//printf("i==%d", i);
printf(">");
}
i++;
}
system("cls");
while(true)
{
printf("\n\n");
//printf("0.test\n");
printf("\n\t\t\t+++++++++++++++++++++++++++++欢迎进入数据管理系统++++++++++++++++++++++++\n");
printf("");
printf("\n\t\t\t*************************************************************************\n");
printf("\t\t\t|1.顺序表的初始化\t\t\t5.顺序表的删除(按值和按位置) |\n");
printf("\t\t\t|2.输入一个顺序表的值\t\t\t6.修改元素(按值和按位置)\t|\n");
printf("\t\t\t|3.查询元素(按值和按位置)\t\t7.遍历顺序表 \t\t|\n");
printf("\t\t\t|4.顺序表的插入(按值和按位置)\t\t8.排序 \t\t|\n");
printf("\t\t\t|9.逆置\t\t\t\t\t10.销毁顺序表 \t|\n");
printf("\t\t\t|11.清屏\t\t\t\t12.退出系统 \t\t|\n");
printf("\t\t\t*************************************************************************\n");
printf("\n\n");
int c;
scanf("%d", &c);
switch(c)
{
case 1:
if(InitList(&L)==OK)
printf("\n初始化成功!\n");
else
printf("\n初始化失败!\n");
break;//顺序表初始化
case 2:
if(InputList(&L)==OK)
printf("\n输入顺序表成功!\n");
else
printf("\n输入顺序表失败!\n");
break;
case 3:
{
printf("\n请输入要选择的操作\n");
printf("\n1.按值查询\n");
printf("\n2.按位置查询\n");
printf("\n其它键.返回上一层\n");
int n;
scanf("%d", &n);
if(n==1)
{
if(Find_Value(&L)==OK)
printf("\n按值查询成功!\n");
else
printf("\n按值查询失败!\n");
}
if(n==2)
{
if(Find_Position(&L)==OK)
printf("\n按位置查询成功!\n");
else
printf("\n按位置查询失败!\n");
}
}
;break;
case 4:
{
printf("\n请输入要选择的操作\n");
printf("\n1.按位置插入\n");
printf("\n其它键.返回上一层\n");
int n;
scanf("%d", &n);
if(n==1)
{
if(InsertList_Position(&L)==OK)
printf("\n按位置插入成功!\n");
else
printf("\n按位置插入失败!\n");
}
}
;break;
case 5:
{
printf("\n请输入要选择的操作\n");
printf("\n1.按值删除\n");
printf("\n2.按位置删除\n");
printf("\n其它键.返回上一层\n");
int n;
scanf("%d", &n);
if(n==1)
{
if(Delete_Value(&L)==OK) //按值删除
printf("\n按值删除成功!\n");
else
printf("\n按值删除失败!\n");
}
if(n==2)
{
if(Delete_Position(&L)==OK) //查找(2), 按位置查找(&L)==OK)
printf("\n按位置查询成功!\n");
else
printf("\n按位置查询失败!\n");
}
};
break;
case 6:
{
printf("\n请输入要选择的操作\n");
printf("\n1.按值修改\n");
printf("\n2.按位置修改\n");
printf("\n其它键.返回上一层\n");
int n;
scanf("%d", &n);
if(n==1)
{
if(Revise_Value(&L)==OK) //按值修改
printf("\n按值修改成功!\n");
else
printf("\n按值修改失败!\n");
}
if(n==2)
{
if(Revise_Position(&L)==OK)
printf("\n按位置修改成功!\n");
else
printf("\n按位置修改失败!\n");
}
};
break;
case 7:
{
if(TraverList(&L)==OK)
printf("\n遍历成功!\n");
else
printf("\n遍历失败!\n");
};
break;
case 8:
{
if(Sort_List(&L)==OK)
printf("\n排序成功!\n");
else
printf("\n排序失败!\n");
};
break;
case 9:
{
if(Reverse_List(&L) ==OK)
printf("\n顺序表逆置成功!\n");
else
printf("\n顺逆置失败!\n");
};
break;
case 10:
{
if(DestoryList(&L) ==OK)
printf("\n顺序表销毁成功!\n");
else
printf("\n顺序表销毁失败!\n");
};
break;//清屏
case 11:
{
system("cls");
}
break;
case 12:
{
printf("\n退出系统!\n");
return ERROR;
}; break;
default:printf("\n输入有误!\n");break;
}
}
}
else
{
printf("\n密码或账号输入有误!\n");
}
return 0;
}