数据结构->顺序表的操作

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;
}


  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值