顺序表的各种操作以及合并
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;
}
/*建议初学者要有耐心把每一个操作都熟悉,刚开始肯定会有许多错误,
有些错误还是自己无法看出来的,多看看别人的代码 */
#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;
}
相关文章推荐
- sql Server 2008 express 版登录名
- DAO和Service层的一些解释
- 净空法师:年轻时候好,是你前生所修的
- 在 windows 上折腾 GitHub
- Memcached客户端-XMemcached使用
- windows下安装redis
- Url 传递中文 加密
- Memcached客户端-XMemcached使用
- ContentProvider的使用(2)
- 0724真实的生活——远处是风景,近处才是人生
- 将 HEXO 从 Ubuntu 迁移到 windows
- A javascript library providing cross-browser, cross-site messaging/method invocation. http://easyxdm.net
- iOS 27个库
- iOS中UITableview实现跨区域拖动效果的实现
- oracle 10g操作和维护手册
- 使用memcached客户端Xmemcached与Spring整合
- 使用memcached客户端Xmemcached与Spring整合
- NYOJ分数加减法
- 图形图像库集合
- 分页和多条件查询功能