#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;
}

 

10-05 14:25