數據結構->順序表的操作

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


發佈了89 篇原創文章 · 獲贊 25 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章