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

顺序表的基本操作(创建,遍历,查找,删除,归并)

2015-09-20 18:35 369 查看
#include"stdio.h"
#include"stdlib.h"
#define SIZE 10
#define LISTINCREMENT 10

typedef struct{
int *elem;
int length;
int listsize;
}SqList;

void Print_List(SqList L){ //遍历顺序表
int i;
for(i=0;i<L.length;i++)
printf("%d\t",L.elem[i]);
}//Print_List

void Create_List(SqList &L){ //创建顺序表
int i;
L.elem=(int *)malloc(SIZE*sizeof(int));
printf("请输入顺序表长度\n");
scanf("%d",&L.length);
printf("请输入元素\n");
for(i=0;i<L.length;i++){
scanf("%d",L.elem+i);
}
Print_List(L);//遍历并显示顺序表;

}//Create_List

void Search_Elem(SqList L){//找某一元素,查找成功显示查找元素,否则显示查找失败。
int i,elem,flag=0;
printf("请输入你要查找的元素\n");
scanf("%d",&elem);

for(i=0;i<L.length;i++){
if(L.elem[i]==elem){
printf("该元素位于%d\n",i+1);
flag=1;
}
}
if(flag==0)
printf("没有该元素\n");

}//Search_List;

void Insert_Elem(SqList &L,int n,int m){//在第n个元素前插入元素m
int i;
printf("在第几个元素前插入几\n");
scanf("%d%d",&n,&m);
if(n<1 || n>L.length)
exit(0);
for(i=L.length;i>=n-1;i--)
L.elem[i+1]=L.elem[i];
L.elem[n-1]=m;
++L.length;
Print_List(L);
}//Insert

void Delete_Elem(SqList &L){//删除第m个元素
int i,m;
printf("请输入要删除元素的位置\n");
scanf("%d",&m);

if(m<1 || m>L.length)
exit(0);
for(i=m-1;i<L.length;i++){
L.elem[i]=L.elem[i+1];
}
L.length--;
Print_List(L);
}//Delete_Elem;

void Merge_List(SqList La,SqList Lb,SqList Lc){//顺序表的归并
int *pa=La.elem,*pb=Lb.elem,*pc;
int *pa_last,*pb_last;
Lc.listsize=Lc.length=La.length+Lb.length;
pc=Lc.elem=(int*)malloc(Lc.listsize*sizeof(int));
if(!Lc.elem)
exit(0);
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++;
Print_List(Lc);
}//Merge_List;

int main(){

SqList l,p,q,u;
int m,n;

Create_List(l);//创建顺序表;

Search_Elem(l);//查找顺序表中的某个元素;

Insert_Elem(l,n,m);//插入

Delete_Elem(l);//删除第m个元素

printf("请输入两个顺序递增表:\n");
Create_List(p);
Create_List(q);

Merge_List(p,q,u);//归并

return 0;
}


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构