您的位置:首页 > 理论基础 > 数据结构算法

数据结构顺序表相关基本操作练笔

2016-10-16 15:39 423 查看
数据结构顺序表相关基本操作练笔

#include<stdio.h>
#include<stdlib.h>
#define MAX 30
#define LIST_INCREMENT 40
typedef struct{
int lenth;
int listsize;
int *base;

}sqlist;

void InitList(sqlist &L)//初始化顺序表
{
L.base=(int *)malloc(MAX*sizeof(int));
if(!L.base)//分配内存失败
exit(1);
L.lenth=0;
L.listsize=MAX;
printf("please input the lenth of the list\n");
scanf("%d",&L.lenth);
printf("please input the val of the list:");
for(int i=0;i<L.lenth;i++)
{
scanf("%d",&L.base[i]);
}

}
void output(sqlist L)//输出函数
{
int i;
for(i=0;i<L.lenth;i++)
{
printf("%5d",L.base[i]);
}
printf("\n");
}
bool compare(int elem1,int elem2)
{
if(elem1==elem2)
return true;
else
return false;
}
int LocateElem(sqlist L,int elem)
{
int i=1;
int *p=L.base;
while(i<=L.lenth&&!compare(*p++,elem))//注意是*p++,取的是指针p的值,再++,不是 *p
//如果这里用*p的话,下面一定不要忘了加*p++;
{
i++;
}
if(i<=L.lenth)
return i;
else
return 0;
}
void Destroylist(sqlist &L)//销毁顺序线性表L
{
free(L.base);//释放L.base所指向的存储空间
L.base=NULL;//L.base 不指向任何的存储单元
L.lenth=0;
L.listsize=0;

}
int ListInsert(sqlist &L,int i,int elem)
{
int *newbase,*p,*q;
if(i<1||i>L.lenth+1)
{
return 0;
}
if(L.lenth==L.listsize)
{
newbase=(int *)realloc(L.base,(L.listsize+LIST_INCREMENT)*sizeof(int));
if(!newbase)
exit(1);
L.base=newbase;
L.listsize+=LIST_INCREMENT;
}
q=L.base+i-1;
for(p=L.base+L.lenth-1;p>=q;--p)
{
*(p+1)=*p;
*q=elem;
L.lenth++;

}
return 0;
}
void ListDele(sqlist L,int i)
{
int elem;
int *p,*q;

p=L.base+i-1;
elem=*p;
q=L.base+L.lenth-1;
for(p++;p<=q;p++)
*(p-1)=*p;
L.lenth-1;

}
void MergeList(sqlist La,sqlist &Lb,sqlist &Lc)
{
int *pa,*pa_last,*pb,*pb_last,*pc;
pa=La.base;
pb=Lb.base;
Lc.listsize=Lc.lenth=La.lenth+Lb.lenth;
pc=Lc.base=(int*)malloc(Lc.listsize*sizeof(int));
if(!Lc.base)
{
exit(0);
}
pa_last=La.base+La.lenth-1;
pb_last=Lb.base+Lb.lenth-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++;
}

int main()
{
int a,i;
int elem;
sqlist La;
InitList(La);
output(La);
printf("请输入要查找的数据:");
scanf("%d",&elem);
a=LocateElem(La,elem);
printf("%d",a);
printf("please input the number you want to del\n");
scanf("%d",&i);
ListDele(La,i);
output(La);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: