小小顺序表

随便乱写的一个程序 ,希望大家多多评定  有什么不好的地方请指教 。。。。

 

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值