随便乱写的一个程序 ,希望大家多多评定 有什么不好的地方请指教 。。。。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define LIST_INT_SIZE 100
#define MAXSIZE 50
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status ;
typedef int ElemType;
int i,*p;
struct SqList {//建立数据库表
ElemType *elem;
int length; // 当前长度(元素的个数)
int listsize; // 当前分配的存储容量
}List;
Status initlist_Sq(SqList &L) //初始化顺序表
{
L.elem=(ElemType *)malloc(LIST_INT_SIZE*sizeof (ElemType) );
if(!L.elem)
exit (-2);
L.length=0;
L.listsize=LIST_INT_SIZE;
return 1;
}
void CreatList(SqList L)
{
List.listsize=10;
printf("请输入表长");
scanf("%d",&List.length);
fflush(stdin);
printf("请输入各个元素值/n");
for(i=0;i<List.length;i++)
{
scanf("%d",&List.elem[i]);
}
}
int GetElem(SqList L,int i,ElemType &e)
{
if ( (i<1) || (i>L.length) )
return 0;
else
{
e=L.elem[i-1];
return 1;
}
}
int LocateElem (SqList L,ElemType e)
{
int i;
for(i=0;(i<L.length)&&(L.elem[i]!=e);i++);
if (i == L.length)
return 0 ;
else
return(i+1);
}
int insert(SqList &L,int i,int e)
{
ElemType *p,*q,*newbase;
if(i<0||i>L.length+1)
{
printf("插入位置不合法!!");
return 0;
}
if(L.length>=L.listsize)
{
newbase=(ElemType *) realloc (L.elem,(L.listsize+LISTINCREMENT) * sizeof (ElemType));
if(!newbase)
exit(-2);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;p--)
*(p+1)=*p;
*q=e;
++L.length;
return 1;
}
Status delete_Sq(SqList &L,int i,ElemType &e)
{
ElemType *p,*q;
p=L.elem+i-1;
e=*p;
q=L.elem+L.length-1;
for(;p<=q;p++)
*p=*(p+1);
L.length--;
return 0;
}
void ClearList(SqList &L)
{
L.length=0;
}
int DestroyList(SqList &L)
{ if (!L.elem) return 0;
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
return 1;
}
main()
{
////////////////////定义处
char key;
int weizhi,shuzhi,e;
////////////////////
printf("(隐藏选项0:初始化表)/n1:建立数据表/n2:求数据表长度/n3:定位查询数值/n4:求出e值的位置/n5:插入操作/n6:删除操作/n7:显示现在的顺序表/n8:清空数据表/n9:摧毁数据表/nx:退出/n");
menu:
printf("请输入您要的操作:");
scanf("%c",&key);
fflush(stdin);
switch(key)
{
case '0':initlist_Sq(List);break;
case '1':CreatList(List);printf("现在表状态为:");
for(i=0;i<List.length;i++) printf("%d ",List.elem[i]);printf("/n");break;
case '2':printf("表长为:%d/n",List.length);break;
case '3':printf("请输入要查询的位置:");scanf("%d",&weizhi);GetElem(List,weizhi,shuzhi);
if(GetElem(List,weizhi,shuzhi)==0) printf("没有这个位置的数值/n");
else printf("这个位置的数值为:%d/n",shuzhi);break;
case '4':printf("请输入e值:");scanf("%d",&e);
if(LocateElem(List,e)==0) printf("顺序表找不到这个数值/n");
else printf("该数值对应位置为%d/n",LocateElem(List,e));break;
case '5':printf("请输入要插入的位置:");scanf("%d",&weizhi);printf("/n请输入要插入的数值:");scanf("%d",&e);insert(List,weizhi,e);
printf("现在表状态为:");
for(i=0;i<List.length;i++) printf("%d ",List.elem[i]);printf("/n");break;
case '6':printf("请输入要删除的位置:");scanf("%d",&weizhi);delete_Sq(List,weizhi,e);
printf("现在表状态为:");
for(i=0;i<List.length;i++) printf("%d ",List.elem[i]);printf("/n");break;
case '7':
if (List.length==0) printf("表中无数据!");
else
{printf("现在表状态为:");
for(i=0;i<List.length;i++) printf("%d ",List.elem[i]);printf("/n");}break;
case '8':ClearList(List);break;
case '9':DestroyList(List);break;
case 'x':exit(0);
default:printf("输入有误");break;
}
fflush(stdin);
goto menu;
;
}
1386

被折叠的 条评论
为什么被折叠?



