这是线性表的一种顺序存储结构--顺序表的一个应用,对于顺序表要熟练掌握它的定义,需要一段连续的内存空间来存储,即用数组来存储,然后还要熟练掌握顺序表的插入,删除,初始化,取表元,及按值查找。。。。。。

(一)对于线性表的基本操作:

(1)初始化:构造空表。

                   Init_List(L);

(2)求表长:球线性表中元素的个数。

                  Length_List(L);

(3)取表元:取出L中第i个元素的值或地址(1<=i<=Length_List(L))。

                  Get_List(L,i);

(4)按值查找:查找L中首次出现值为x的地址或序号。

                  Locate_List(L,x);

(5)插入:在L的i位置插入元素值x(1<=i<=n+1(n为插入前的表长))。

                  Insert_List(L,i,x);

(6)删除:在L的位置i删除元素(1<=i<=n)

                  Delete_List(L,i);

(二)顺序表的定义:

      #define MAXSIZE   ......

      typedef int(char,double.......) DateType;

      typedef struct{

             DateType data[MAXSIZE];

             int last;

     }seqlist;

     seqlist L,*L;

     定义seqlist *L于定义seqlist L的差别;

     前者为定义指向结构体的指针,后者为定义一个结构体;

      前者的(*L).data[i]和L->data[i]与后者的L.data[i]等价;

(三)对于顺序表的基本操作:

(1)顺序表的初始化:

        seqlist* Init_seqlist()

        {

                 seqlist *L;

                 L=(seqlist *)malloc(sizeof(seqlist));

                 L->last=-1;

                 return L;

        }

(2)顺序表的插入:

       seqlist *Insert(seqlist *L,int i,DateType x)

      {

                 if(L->last=MAXSIZE-1)

                           printf("表满\n");

                            return NULL;

                 if(i<1||i>L->last+2)

                          printf("位置错\n");

                 for(int j=L->last,j>=i-1;j--)

                 {

                            L->data[j+1]=L->data[j];

                 }

                 L->data[i-1]=x;

                 L->last++;

                 return L;

      }

(3)顺序表的删除:

    seqlist *Delete_seqlist(seqlist *L,int i)

     {

                if(i<1||i>L->last+1)

                        printf("不存在i\n");

                        return NULL;

                 for(int j=i;j<=L->last;j++)

                 {

                        

                 }

      }

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int DateType;
typedef struct
{
   DateType data[MAXSIZE];
   int last;
}seqlist;
seqlist *Init_seqlist()
{
    int n;
    seqlist *L;
    L=(seqlist *)malloc(sizeof(seqlist));
    L->last=-1;
    printf("请输入顺序表的元素个数:\n");
    scanf("%d",&n);
    L->last=n-1;
    printf("请输入一个顺序表:\n");
    for(int i=0;i<n;i++)
    {
        printf("顺序表的第%d个元素为:\n",i+1);
        scanf("%d",&L->data[i]);
    }
    return L;
}
seqlist *part_seqlist(seqlist *s)
{
    int t,k;
    t=s->data[0];
    for(int i=1;i<=s->last;i++)
    {
        if(s->data[i]<t)
        {
            k=s->data[i];
            for(int j=i-1;j>=0;j--)
            {
                s->data[j+1]=s->data[j];
            }
            s->data[0]=k;
        }
    }
    return s;
}
int main()
{
   seqlist *L,*S;
   L=Init_seqlist();
   printf("划分前的顺序表为:\n");
   for(int i=0;i<=L->last;i++)
   {
       if(i==0)
       {
           printf("%d",L->data[i]);
       }
       else
       {
           printf(" %d",L->data[i]);
       }
   }
   printf("\n");
   S=part_seqlist(L);
   printf("划分后的顺序表为:\n");
   for(int i=0;i<=S->last;i++)
   {
       if(i==0)
       {
           printf("%d",S->data[i]);
       }
       else
       {
           printf(" %d",S->data[i]);
       }
   }
   printf("\n");
   system("pause");
   return 0;
}

posted on 2011-04-23 14:45  枫叶飘泪  阅读(1031)  评论(0编辑  收藏  举报