您的位置:首页 > 其它

顺序表的各种操作以及合并

2015-07-24 08:59 239 查看

/*建议初学者要有耐心把每一个操作都熟悉,刚开始肯定会有许多错误,

有些错误还是自己无法看出来的,多看看别人的代码 */

#include<stdio.h>

#include<stdlib.h>

typedef struct node

{

int s[1000];

int length;

}linklist;

void chu(linklist *head)//初始化

{head->length=0;}

void in(linklist *head,int n)//输入

{

if(head->length>=1000) printf("顺序表已满\n");

else

{

printf("请按非递减顺序输入数字,每两个数字间以空格作为间隔\n");

for(int i=0;i<n;i++)

{

printf(" 请输入数字:\n");

scanf("%d",&head->s[i]);

head->length=head->length+1;

}

}

}

void out(linklist *head)//输出

{

if(head->length==0) printf("此顺序表是空的\n");

else

{

int i;

for(i=0;i<head->length;i++)

{printf("%d ",head->s[i]);}

printf("\n");

}

}

int seek(linklist *head,int n)//按元素查找head中是是否有和n一样的元素

{

if(head->length==0) printf("顺序表为空\n");

else

{

for(int i=0;i<head->length;i++)

{

if(head->s[i]==n) return 1;

}

}

return 0;

}

int dele(linklist *head,int n)//按元素查找到相同的元素,删除掉

{

if(head->length==0) printf("顺序表为空\n");

else

{

int i;

for(i=0;i<head->length;i++)

{

if(head->s[i]==n) break;

}

for(int j=i+1;j<head->length;j++)

head->s[j-1]=head->s[j];

head->length--;

}

}

void insert(linklist *head,int n,int k)//在head顺序表中插入k元素

{

if(head->length>=1000) printf("顺序表已满\n");

else if(n<0||n>1000) printf("插入位置有误\n");

else

{

for(int i=head->length;i>n;i--)

{head->s[i]=head->s[i-1];}

head->s
=k;

head->length=head->length+1;

}

}

void hebing(linklist *head1,linklist *head2,linklist *head3)//合并操作

{

int i=0,j=0,m=0;

while(i<head1->length&&j<head2->length)

{

if(head1->s[i]<head2->s[j])

{

head3->s[m]=head1->s[i];

m++;

i++;

}

if(head1->s[i]>head2->s[j])

{

head3->s[m]=head2->s[j];

m++;

j++;

}

if(head1->s[i]==head2->s[j])

{

head3->s[m]=head1->s[i];

m++;

head3->s[m]=head2->s[j];

m++;

i++;

j++;

}

}

while(i<head1->length)

{

head3->s[m++]=head1->s[i++];

}

while(j<head2->length)

{

head3->s[m++]=head2->s[j++];

}

head3->length=m;

}

int main()

{

int m,n;

linklist head1,head2,head3;

chu(&head1);

chu(&head2);

chu(&head3);

printf("请输入第一个顺序表中元素的个数\n");

scanf("%d",&n);

in(&head1,n);

printf("第一个顺序表中的元素为:\n");

out(&head1);

printf("请输入第二个顺序表中元素的个数\n");

scanf("%d",&m);

in(&head2,m);

printf("第二个顺序表中的元素为:\n");

out(&head2);

hebing(&head1,&head2,&head3);

printf(" 合并后的顺序表为:\n");

out(&head3);

return 0;

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