#include "head.h"
int main(int argc, const char *argv[])
{
// seqlist list=create();
int n;
datetype e,key;
/* printf("请输入你要插入的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("请输入要插入的元素:");
scanf("%d",&e);
insert_rear(list,e);
}
output(list);*/
/*int m;
printf("你要删除的个数:");
scanf("%d",&m);
for(int i=0;i<m;i++)
{
delete_rear(list);
}
output(list);
int sub;
printf("请输入你要查找的下标:");
scanf("%d",&sub);
search_sub(list,sub);
printf("请输入你要修改的下标:");
scanf("%d",&sub);
printf("请输入你修改的值:");
scanf("%d",&e);
update_sub(list,sub,e);
output(list);
printf("请输入你要插入的下标:");
scanf("%d",&sub);
printf("请输入你要插入的元素:");
scanf("%d",&e);
insert_sub(list,sub,e);
output(list);
printf("请输入你要删除元素的下标啊:");
scanf("%d",&sub);
delete_sub(list,sub);
output(list);
printf("请输入你要查找的元素:");
scanf("%d",&e);
int flog=search_date(list,e);
if(flog==-1)
printf("查找失败\n");
printf("要查找元素的下标:%d\n",flog);
datetype key;
printf("请输入你要修改的元素:");
scanf("%d",&e);
printf("请输入你要改成的值:");
scanf("%d",&key);
search_update(list,e,key);
output(list);
RemoveSame(list);
output(list);*/
/* printf("请输入你要插入位置前的元素:");
scanf("%d",&e);
printf("请输入你要插入的元素:");
scanf("%d",&key);
insert_date(list,e,key);
output(list);
printf("请输入你要删除的元素:");
scanf("%d",&e);
delete_date(list,e);
output(list);*/
//list_sort(list);
//output(list);
seqlist list1=create();
seqlist list2=create();
seqlist list3=create();
printf("请输入你要插入的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("请输入要插入的元素:");
scanf("%d",&e);
insert_rear(list1,e);
}
printf("需要合并的第一个顺序表:\n");
output(list1);
printf("请输入你要插入的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("请输入要插入的元素:");
scanf("%d",&e);
insert_rear(list2,e);
}
printf("需要合并的第二个顺序表:\n");
output(list2);
combin(list1,list2,list3);
printf("合并过后的顺序表:\n");
output(list3);
return 0;
}
#include "head.h"
seqlist create()
{
seqlist list=(seqlist)malloc(sizeof(Seqlist));
if(list==NULL)
return NULL;
list->len=0;
return list;
}
int full_list(seqlist list)
{
return list->len==MAXSIZE?-1:0;
}
int insert_rear(seqlist list,datetype e)
{
if(list==NULL||full_list(list)==-1)
{
printf("插入失败\n");
return -1;
}
list->date[list->len]=e;
list->len++;
return 0;
}
int empty_selist(seqlist list)
{
return list->len==0?-1:0;
}
void output(seqlist list)
{
if(list==NULL||empty_selist(list)==-1)
{
puts("遍历失败");
return;
}
for(int i=0;i<list->len;i++)
{
printf("%d\t",list->date[i]);
}
puts("");
}
int delete_rear(seqlist list)
{
if(list==NULL||empty_selist(list)==-1)
{
puts("插入失败");
return -1;
}
list->len--;
return 0;
}
int search_sub(seqlist list,int sub)
{
if(list==NULL||empty_selist(list)==-1||sub>=list->len||sub<0)
{
printf("查找失败\n");
return -1;
}
printf("查找的元素是:%d\n",list->date[sub]);
return 0;
}
int update_sub(seqlist list,int sub,datetype e)
{
if(list==NULL||empty_selist(list)==-1||sub<0||sub>=list->len)
{
printf("修改失败\n");
return -1;
}
list->date[sub]=e;
return 0;
}
int insert_sub(seqlist list,int sub,datetype e)
{
if(list==NULL||empty_selist(list)==-1||sub<0||sub>list->len)
{
printf("插入失败\n");
return -1;
}
for(int i=list->len;i>=sub;i--)
{
list->date[i+1]=list->date[i];
}
list->date[sub]=e;
list->len++;
return 0;
}
int delete_sub(seqlist list,int sub)
{
if(list==NULL||empty_selist(list)==-1||sub<0||sub>=list->len)
{
printf("删除失败\n");
return -1;
}
for(int i=sub;i<list->len-1;i++)
{
list->date[i]=list->date[i+1];
}
list->len--;
return 0;
}
int search_date(seqlist list,datetype e)
{
if(list==NULL||empty_selist(list)==-1)
{
return -1;
}
for(int i=0;i<list->len;i++)
{
if(list->date[i]==e)
return i;
}
return -1;
}
int search_update(seqlist list,datetype e,datetype key)
{
int flog=search_date(list,e);
update_sub(list,flog,key);
return 0;
}
int RemoveSame(seqlist list)
{
int i,j;
for(i=0;i<list->len-1;i++)
{
for(j=i+1;j<list->len;j++)
{
if(list->date[i]==list->date[j])
{
delete_sub(list,j);
j--;
}
}
}
return 0;
}
//按元素插入其后继元素
int insert_date(seqlist list,datetype e,datetype key)
{
int sub=search_date(list,e);
if(sub==-1)
{
printf("%d 查找失败无法插入\n",e);
return -1;
}
insert_sub(list,sub+1,key);
return 0;
}
//按元素删除
int delete_date(seqlist list,datetype e)
{
int sub=search_date(list,e);
if(sub==-1)
{
printf("该元素未找到,无法删除\n");
return -1;
}
printf("%d\n",sub);
delete_sub(list,sub);
return 0;
}
//顺序表排序
void list_sort(seqlist list)
{
if(list==NULL||empty_selist(list)==-1)
{
printf("排序失败\n");
return;
}
for(int i=1;i<list->len;i++)
{
int count=0;
for(int j=0;j<list->len-i;j++)
{
if(list->date[j]>list->date[j+1])
{
datetype temp=list->date[j];
list->date[j]=list->date[j+1];
list->date[j+1]=temp;
count++;
}
}
if(count==0)
break;
}
}
//合并顺序表
void combin(seqlist list1,seqlist list2,seqlist list3)
{
list_sort(list1);
list_sort(list2);
int p=0,q=0,r=0;
while(list1->len>p&&list2->len>q)
{
if(list1->date[p]<list2->date[q])
{
list3->date[r]=list1->date[p];
r++;
p++;
}
else
{
list3->date[r]=list2->date[q];
r++;
q++;
}
}
if(p<list1->len)
{
while(p<list1->len)
{
list3->date[r]=list1->date[p];
r++;
p++;
}
}
else
{
while(q<list2->len)
{
list3->date[r]=list2->date[q];
r++;
q++;
}
}
list3->len=r;
}
//释放顺序表
void seqlist freespace1(seqlist p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 20
typedef int datetype;
typedef struct
{
datetype date[MAXSIZE];
int len;
}Seqlist,*seqlist;
seqlist create();
int full_list(seqlist list);
int insert_rear(seqlist list,datetype e);
int empty_selist(seqlist list);
void output(seqlist list);
int delete_rear(seqlist list);
int search_sub(seqlist list,int sub);
int update_sub(seqlist list,int sub,datetype e);
int insert_sub(seqlist list,int sub,datetype e);
int delete_sub(seqlist list,int sub);
int search_date(seqlist list,datetype e);
int search_update(seqlist list,datetype e,datetype key);
int RemoveSame(seqlist list);
int insert_date(seqlist list,datetype e,datetype key);
int delete_date(seqlist list,datetype e);
void list_sort(seqlist list);
void combin(seqlist list1,seqlist list2,seqlist list3);
void seqlist freespace1(seqlist p);
#endif
1.合并顺序表
2.释放空间;
3.顺序表排序
4.按元素插入
5.按元素删除