文档库 最新最全的文档下载
当前位置:文档库 › 数据结构顺序表源代码

数据结构顺序表源代码

#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define elemtype int
#define status int
#define N 5
#define LISTINCREMENT 10
#define LISI_INIT_SIZE 100

typedef struct{
elemtype *elem;
int length;
int listsize;
}sqlist;
sqlist l;

void menu();//菜单
void input(sqlist &l);
void InitList();
void locateelem_sq(sqlist l);//查找
status listinsert_sq(sqlist &l);//插入
void Delete(sqlist &l);//删除
void printlist(sqlist l) ;//输出
void sort(sqlist l);//排序
void negetive(sqlist l);//逆置

int main()
{
int x;
InitList();
for(;;)
{

menu();
scanf("%d",&x);

switch(x)
{
case 1:input(l);break;
case 2: locateelem_sq(l);break;
case 3:listinsert_sq(l);break;
case 4:Delete(l);break;
case 5:printlist(l) ;break;
case 6:sort(l) ;break;
case 7:negetive(l);break;
default:printf("please input a number again!\n");
}
}
return 0;
}

void InitList()//初始化
{
l.elem=(elemtype *)malloc(LISI_INIT_SIZE*sizeof(elemtype));
if(!l.elem)
exit(OVERFLOW);
l.length=0;
l.listsize=LISI_INIT_SIZE;
}

void menu()
{
printf("**********菜单*************\n");
printf("********1、输入************\n");
printf("********2、查找************\n");
printf("********3、插入************\n");
printf("********4、删除************\n");
printf("********5、输出************\n");
printf("********6、排序************\n");
printf("********7、逆置************\n");
printf("请输入操作步骤:");
}

void input(sqlist &l)//输入
{
int i;
for(i=0;iscanf("%d",&l.elem[i]);
}

void locateelem_sq(sqlist l)//查找
{
int x,i;
printf("请输入要查找的数:");
scanf("%d",&x);
for(i=0;i{
if(x==l.elem[i])
printf("存在%d\n",x);
}
}

status listinsert_sq(sqlist &l)//插入
{
int i;
elemtype e;
int * q,*p;
printf("请输入i的值:");
scanf("%d",&i);
printf("\n请输入e的值:");
scanf("%d",&e);
q=&(l.elem[i-1]);
for(p= &(l.elem[l.length-1]); p >= q;p--)
*(p+1)=*p;
*q=e;
++l.length;
printf("线性表的长度为:%d",l.length);
printf("\n");
printf("插入后的数后的线性表为:\n");
for (p=l.elem;pprintf("%5d",*p);
printf("\n");
return OK;
}

void Delete(sqlist &l)//删除
{
int i;
elemtype e;
int *q,*p;
printf("请输入i的值:");
scanf("%d",&i);
printf("\n请输入e的值:");
scanf("%d",&e);
if((i<1)||(i>l.length)) return;
p=&(l.elem[i-1]);
q=l.elem+l.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--l.length;
printf("线性表的的长度为%d",l.length);
printf("\n");
printf("删除后的线性表为:\n");
for (p=l.elem;pprintf("%d ",*p);
printf("\n");
}

void printlist(sqli

st l)//输出
{
int i;
if (l.length>0)
{
printf ("线性表为:\n ");
for (i=0;i{
printf("%5d",l.elem[i]);
}
printf("\n");
}
else
printf ("List is empty.\n\n");
}

void sort(sqlist l)//排序
{

int i,j,t;
for(i=0;ifor(j=0;jif(l.elem[j]>l.elem[j+1])
{
t=l.elem[j];l.elem[j]=l.elem[j+1];l.elem[j+1]=t;
}
printf ("排序后的线性表为:\n");
for (i=0;iprintf("%5d",l.elem[i]);
printf("\n");
}

void negetive(sqlist l)//逆置
{
int i,t;
for(i=0;i{t=l.elem[i];
l.elem[i]=l.elem[l.length-i-1];
l.elem[l.length-i-1]=t;
}
printf("逆置后的线性表为:\n");
for (i=0;iprintf("%5d",l.elem[i]);
printf("\n");
}

相关文档
相关文档 最新文档