1、輸入一組整型元素序列,建立順序表。
2、實現該順序表的遍歷。
3、在該順序表中進行順序查找某一元素,查找成功返回1,否則返回0。
4、判斷該順序表中元素是否對稱,對稱返回1,否則返回0。
5、實現把該表中所有奇數排在偶數之前,即表的前面爲奇數,後面爲偶數。
6、輸入整型元素序列利用有序表插入算法建立一個有序表。
7、利用算法6建立兩個非遞減有序表並把它們合併成一個非遞減有序表。
8、編寫一個主函數,調試上述算法。
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
#define maxn 100000
//const int maxn=10000;
typedef struct node
{
ElemType data[maxn];
int length;
}Seqlist;
Seqlist* cj(Seqlist *L)
{
int t;
scanf("%d",&t);
int i=0;
while(t!=-1)
{
L->data[i++]=t;
L->length++;
scanf("%d",&t);
if(L->length>maxn)
{
printf("該表已滿\n");
return 0;
}
}
return L;
}
void bl(Seqlist *l)
{
int i=0;
for(; i<l->length; i++)
printf("%d ",l->data[i]);
puts("");
}
int cz(Seqlist *l,int t)
{
int i=0;
for(;i<l->length;i++)
{
if(l->data[i]==t)
return 1;
}
return 0;
}
int dc(Seqlist *l)
{
int i=0;
int j=(l->length)-1;
while(l->data[i]==l->data[j])
{
i++;
j--;
if(j<=i)
return 1;
}
return 0;
}
void jh(Seqlist *l)
{
int i=0;
int j=(l->length)-1;
while(i<j)
{
if(l->data[i]%2==0&&l->data[j]%2==1)
{
int t;
t=l->data[i];
l->data[i]=l->data[j];
l->data[j]=t;
i++;
j--;
}
else if(l->data[i]%2==0&&l->data[j]%2==0)
{
j--;
}
else if(l->data[i]%2==1&&l->data[j]%2==1)
{
i++;
}
else
{
i++;
j--;
}
}
}
Seqlist* cr(Seqlist *l)
{
int t;
scanf("%d",&t);
int i=0;
while(t!=-1)
{
l->length++;
if(i==0)
l->data[i++]=t;
else
{
int j=0;
while(l->data[j]<=t)
{
j++;
}
int k;
for(k=l->length-1;k>=j;k--)
l->data[k+1]=l->data[k];
l->data[j]=t;
// bl(l);
}
scanf("%d",&t);
if(l->length>maxn)
{
printf("該表已滿\n");
return 0;
}
}
return l;
}
Seqlist* hb(Seqlist *a,Seqlist *b,Seqlist *h)
{
int i=0,j=0,k=0;
while(i<a->length&&j<b->length)
{
if(a->data[i]<b->data[j])
{
h->data[k++]=a->data[i];
h->length++;
i++;
}
else
{
h->data[k++]=b->data[j];
h->length++;
j++;
}
}
if(i!=a->length-1)
while(i<a->length)
{ h->data[k++]=a->data[i++];
h->length++;
}
if(j!=b->length-1)
while(j<b->length)
{
h->data[k++]=b->data[j++];
h->length++;
}
return h;
/* //合併 短向長合併
if(a->length>b->length)
{
while(j<b->length)
{
int s=0;
while(a->data[s]<b->data[j])
{
s++;
}
int k;
for(k=a->length-1;k>=s;k--)
a->data[k+1]=a->data[k];
a->data[s]=b->data[j];
a->length++;
j++;
}
return a;
}
else
{
while(j<a->length)
{
int s=0;
while(b->data[s]<a->data[j])
{
s++;
}
int k;
for(k=b->length-1;k>=s;k--)
b->data[k+1]=b->data[k];
b->data[s]=a->data[j];
b->length++;
// bl(b);
j++;
}
return b;
}*/
}
int main()
{
Seqlist *h,*tt1,*tt2;
h=(Seqlist *)malloc(sizeof(Seqlist));
h->length=0;
h=cj(h);
bl(h);
printf("查詢1的結果爲 %d\n",cz(h,1));
printf("查詢10的結果爲 %d\n",cz(h,10));
printf("查詢對稱的結果爲 %d\n",dc(h));
jh(h);
printf("奇數在前 偶數在後 的結果爲 ");
bl(h);
puts("");
Seqlist *tt3=(Seqlist *)malloc(sizeof(Seqlist));
tt1=(Seqlist *)malloc(sizeof(Seqlist));tt1=cr(tt1); printf("非遞減有序順序表1: ");bl(tt1);
tt2=(Seqlist *)malloc(sizeof(Seqlist));tt2=cr(tt2); printf("非遞減有序順序表2: ");bl(tt2);
printf("合併後順序表");
bl(hb(tt1,tt2,tt3));
return 0;
}