c语言顺序表实现完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Elemtype;
typedef int Status;
typedef struct
{
Elemtype *elem;
int length;
int listsize;
}SqList; //定义顺序表类型
Status InitList_Sq(SqList &L) //初始化顺序表
{
L.elem=(Elemtype *)malloc(LIST_INIT_SIZE* sizeof(Elemtype)); L.length=0;
L.listsize=LIST_INIT_SIZE;
return 1;
}
void CreateList(SqList &L) //创建顺序表
{
int i;
printf("请输入你要创建的顺序表元素个数");
scanf("%d",&L.length);
printf("请输入你要创建的顺序表:\n");
for(i=0;i scanf("%d",&L.elem[i]); } void print( SqList &L)//输出顺序表 { int i; for(i=0;i printf("%3d",L.elem[i]); } Status location( SqList L,Elemtype e)//查找元素的位置{ int i=0; while(L.elem[i]!=e && i i++; if(i>L.length) return -1; else return i+1;//因为c语言是从下标0开始的当i=0时实际上是顺序表的第i+1个元素} Status ListInsert_Sq(SqList &L,int i,Elemtype e)//在顺序表的第i个位置插入值为e的元素{ Elemtype *newbase,*q,*p; if(i<1||i>L.length+1) return 0; if(L.length>=L.listsize) { newbase=(Elemtype *)realloc(L.elem,(L.listsize+LISTINCREMENT)* sizeof(Elemtype)); 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 ListDelect_Sq(SqList &L,int i,Elemtype e)//在顺序表的第i个位置删除值为e的元素并返回e的值 { Elemtype *q,*p; if(i<1||(i>L.length)) return 0; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; --L.length; return 1; } void Combine(SqList La,SqList Lb,SqList &Lc)//将两个非递减的顺序表合并成一个顺序表,合并 后元素也按值非递减排列 { Elemtype *pa_last,*pb_last,*pa,*pb,*pc; pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length; pc= Lc.elem=(Elemtype *)malloc(Lc.listsize* sizeof(Elemtype)); pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last && pb<=pb_last) { if(*pa<= *pb) *pc++=*pa++; else *pc++=*pb++; } while(pa<=pa_last) *pc++=*pa++; while(pb<=pb_last) *pc++=*pb++; } void main() { SqList la,lb,lc,ld; int i,j; Elemtype e; InitList_Sq(la); CreateList(la); print(la); printf("请输入要查找的元素:\n"); scanf("%d",&e); j=location(la,e); printf("该元素的位置为%d\n",j); printf("请输入要插入的位置和元素:\n"); scanf("%d%d",&i,&e); ListInsert_Sq(la,i,e);