本代码可实现顺序表的简单操作!
希望能与大家交流,帮发表于此!
本代码会慢慢的完善!(已经99%)
以下是sqlist.h头文件
#include "iostream.h"
#include "stdio.h"
#include "stdlib.h"
#define elemtype int
#define sq_listsize 20
#define listincrement 10
#define error 0
#define ok 1
#include "stdio.h"
#include "stdlib.h"
#define elemtype int
#define sq_listsize 20
#define listincrement 10
#define error 0
#define ok 1
以下是sqlist.cpp代码;
#include "sqlist.h"
typedef struct
{
elemtype *elem;
int length;
int listsize;
}sqlist;
int sq_listempty(sqlist *L)//判断是否为空
{
if (L->length<=0)
{
printf("the list is empty!");
return error;
}
else
return ok;
}
int sq_listlength(sqlist *L)//求表的长度
{
printf("the list length is %d",L->length);
return ok;
}
typedef struct
{
elemtype *elem;
int length;
int listsize;
}sqlist;
int sq_listempty(sqlist *L)//判断是否为空
{
if (L->length<=0)
{
printf("the list is empty!");
return error;
}
else
return ok;
}
int sq_listlength(sqlist *L)//求表的长度
{
printf("the list length is %d",L->length);
return ok;
}
sq_initilist(sqlist *L)//初始化顺序表
{
L->elem=(elemtype *)malloc(sq_listsize*sizeof(elemtype));
if(! L->elem) return error;
L->length=0;
L->listsize=sq_listsize;
return ok;
}
int sq_listinsert(sqlist *L,int i, elemtype e)//插入元素
{
elemtype *newbase,*q,*p;
{
L->elem=(elemtype *)malloc(sq_listsize*sizeof(elemtype));
if(! L->elem) return error;
L->length=0;
L->listsize=sq_listsize;
return ok;
}
int sq_listinsert(sqlist *L,int i, elemtype e)//插入元素
{
elemtype *newbase,*q,*p;
if(i<0||i>L->length+1)
{
printf("the list leng is %d now!please try again!",L->length);
return error;
}
{
printf("the list leng is %d now!please try again!",L->length);
return error;
}
if(L->length>=L->listsize)
{
newbase=(elemtype *)realloc(L->elem,(L->listsize+listincrement)*sizeof(elemtype));
L->elem=newbase;
L->listsize+=L->length;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
L->length+=1;
return ok;
}
int sq_listdelet(sqlist *L,int i,elemtype *e)//删除元素
{
elemtype *q,*p;
if(i<0||i>L->length)
{
cout<<"你输入的i值不合法!"<<endl;
return error;
}
p=&L->elem[i-1];
q=L->elem+L->length-1;
*e=*p;
for(++p;p<=q;++p)
*(p-1)=*p;
L->length=L->length-1;
return ok;
{
newbase=(elemtype *)realloc(L->elem,(L->listsize+listincrement)*sizeof(elemtype));
L->elem=newbase;
L->listsize+=L->length;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
L->length+=1;
return ok;
}
int sq_listdelet(sqlist *L,int i,elemtype *e)//删除元素
{
elemtype *q,*p;
if(i<0||i>L->length)
{
cout<<"你输入的i值不合法!"<<endl;
return error;
}
p=&L->elem[i-1];
q=L->elem+L->length-1;
*e=*p;
for(++p;p<=q;++p)
*(p-1)=*p;
L->length=L->length-1;
return ok;
}
void output(sqlist *L)//输出
{
printf("\n");
for(int i=1;i<=L->length;i++)
printf("%d ",L->elem[i-1]);
return;
}
void creatlist(sqlist *L)//创建一个表
{
printf("创建一个顺序表,请输入顺序表的长度!");
int length;
scanf("%d",&length);
for(int i=1;i<=length;i++)
{
printf("请输入第%d个元素:",i);
scanf("%d",&(L->elem[i-1]));
}
for(i=1;i<=length;i++)
{
printf("%d ",L->elem[i-1]);
}
L->length=length;
}
void insert(sqlist *L)//调用插入函数
{
int i,x;
printf("请输入你要插入的位置及值:");
scanf("%d%d",&i,&x);
sq_listinsert(L,i,x);
}
void delet(sqlist *L)//调用删除函数
{
if(L->length==0)
{
printf("该表为空表,请插入元素后再操作!");
return;
}
int i,x;
printf("请输入你要删除的位置:");
scanf("%d",&i);
sq_listdelet(L,i,&x);
cout<<"你删除的元素是:"<<x<<endl;
}
int sq_locatelem(sqlist *L,int i)//位置元素显示函数
{
if (i<1||i>L->length)
{
printf("你输入的i值是非法值!");
return error;
}
printf("第%d个元素是%d.",i,L->elem[i-1]);
return ok;
}
void locat(sqlist *L)//调用位置元素显示函数
{
int i;
printf("请输入你要查看元素的位置:");
scanf("%d",&i);
sq_locatelem(L,i);
return;
}
void sq_order(sqlist *L)
{
int temp;
for(int k=1;k<=L->length-1;k++)
{
for(int j=k+1;j<=L->length;j++)
{
if(L->elem[k-1]<=L->elem[j-1])
{
temp=L->elem[k-1];
L->elem[k-1]=L->elem[j-1];
L->elem[j-1]=temp;
}
}
}
output(L);
}
void sq_merglist(sqlist *L)
{
sqlist m,n,c;
sq_initilist(&m);
sq_initilist(&n);
sq_initilist(&c);
cout<<"合并表需要两个顺序表!请先建表m,n"<<endl;
cout<<"建表m"<<endl;
creatlist(&m);
cout<<"建表n"<<endl;
creatlist(&n);
c.length=m.length+n.length;
int i=1,j=1,k=1;
while((i<=m.length)&&(j<=n.length))
{
if(m.elem[i-1]<=n.elem[j-1])
{
sq_listinsert(&c,++k,m.elem[i-1]);
i++;
}
else
{
sq_listinsert(&c,++k,n.elem[j-1]);
j++;
}
}
while(i<m.length)
{
sq_listinsert(&c,++k,m.elem[i-1]);
i++;
}
while(j<m.length)
{
sq_listinsert(&c,++k,n.elem[j-1]);
j++;
}
output(&c);
}
{
printf("\n");
for(int i=1;i<=L->length;i++)
printf("%d ",L->elem[i-1]);
return;
}
void creatlist(sqlist *L)//创建一个表
{
printf("创建一个顺序表,请输入顺序表的长度!");
int length;
scanf("%d",&length);
for(int i=1;i<=length;i++)
{
printf("请输入第%d个元素:",i);
scanf("%d",&(L->elem[i-1]));
}
for(i=1;i<=length;i++)
{
printf("%d ",L->elem[i-1]);
}
L->length=length;
}
void insert(sqlist *L)//调用插入函数
{
int i,x;
printf("请输入你要插入的位置及值:");
scanf("%d%d",&i,&x);
sq_listinsert(L,i,x);
}
void delet(sqlist *L)//调用删除函数
{
if(L->length==0)
{
printf("该表为空表,请插入元素后再操作!");
return;
}
int i,x;
printf("请输入你要删除的位置:");
scanf("%d",&i);
sq_listdelet(L,i,&x);
cout<<"你删除的元素是:"<<x<<endl;
}
int sq_locatelem(sqlist *L,int i)//位置元素显示函数
{
if (i<1||i>L->length)
{
printf("你输入的i值是非法值!");
return error;
}
printf("第%d个元素是%d.",i,L->elem[i-1]);
return ok;
}
void locat(sqlist *L)//调用位置元素显示函数
{
int i;
printf("请输入你要查看元素的位置:");
scanf("%d",&i);
sq_locatelem(L,i);
return;
}
void sq_order(sqlist *L)
{
int temp;
for(int k=1;k<=L->length-1;k++)
{
for(int j=k+1;j<=L->length;j++)
{
if(L->elem[k-1]<=L->elem[j-1])
{
temp=L->elem[k-1];
L->elem[k-1]=L->elem[j-1];
L->elem[j-1]=temp;
}
}
}
output(L);
}
void sq_merglist(sqlist *L)
{
sqlist m,n,c;
sq_initilist(&m);
sq_initilist(&n);
sq_initilist(&c);
cout<<"合并表需要两个顺序表!请先建表m,n"<<endl;
cout<<"建表m"<<endl;
creatlist(&m);
cout<<"建表n"<<endl;
creatlist(&n);
c.length=m.length+n.length;
int i=1,j=1,k=1;
while((i<=m.length)&&(j<=n.length))
{
if(m.elem[i-1]<=n.elem[j-1])
{
sq_listinsert(&c,++k,m.elem[i-1]);
i++;
}
else
{
sq_listinsert(&c,++k,n.elem[j-1]);
j++;
}
}
while(i<m.length)
{
sq_listinsert(&c,++k,m.elem[i-1]);
i++;
}
while(j<m.length)
{
sq_listinsert(&c,++k,n.elem[j-1]);
j++;
}
output(&c);
}
void main()
{
sqlist L;
{
sqlist L;
sq_initilist(&L);
int i;
cout<<"******************************************************\n"
<<"*-----------*********顺序表的操作*********-----------*\n"
<<"******************************************************\n"
<<"1、初始化顺序表 2、建立一个顺序表\n"
<<"3、判断是否为空表 4、求表的长度 \n"
<<"5、插入元素 6、删除元素 \n"
<<"7、显示指定位置的元素 8、输出 \n"
<<"9、排序 10、合并\n"
<<" 退出 \n "
<<"______________________________________________________\n"
<<"请输入你想要的操作:"<<endl;
scanf("%d",&i);
while(1)
{
switch (i)
{ case 1: sq_initilist(&L);break;
case 2: creatlist(&L);break;
case 3: sq_listempty(&L);break;
case 4: sq_listlength(&L);break;
case 5: insert(&L);break;
case 6: delet(&L);break;
case 7: locat(&L);break;
case 8: output(&L);break;
case 9: sq_order(&L);break;
case 10:sq_merglist(&L);break;
default: printf("thanks for your use!");exit(1);
}
printf("\n请输入你想要的操作:");
i=11;
scanf("%d",&i);
}
}
int i;
cout<<"******************************************************\n"
<<"*-----------*********顺序表的操作*********-----------*\n"
<<"******************************************************\n"
<<"1、初始化顺序表 2、建立一个顺序表\n"
<<"3、判断是否为空表 4、求表的长度 \n"
<<"5、插入元素 6、删除元素 \n"
<<"7、显示指定位置的元素 8、输出 \n"
<<"9、排序 10、合并\n"
<<" 退出 \n "
<<"______________________________________________________\n"
<<"请输入你想要的操作:"<<endl;
scanf("%d",&i);
while(1)
{
switch (i)
{ case 1: sq_initilist(&L);break;
case 2: creatlist(&L);break;
case 3: sq_listempty(&L);break;
case 4: sq_listlength(&L);break;
case 5: insert(&L);break;
case 6: delet(&L);break;
case 7: locat(&L);break;
case 8: output(&L);break;
case 9: sq_order(&L);break;
case 10:sq_merglist(&L);break;
default: printf("thanks for your use!");exit(1);
}
printf("\n请输入你想要的操作:");
i=11;
scanf("%d",&i);
}
}
转载于:https://blog.51cto.com/lopnxrp/293743