#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 10
typedef int Datatype;
typedef struct 
{
  Datatype buf[MAX];
  int n;
}Sequence;

Sequence*create_empty_seqlite()
{
     Sequence*l=NULL;
    l=(Sequence*)malloc(sizeof(Sequence));
    if(NULL==l)
    {
        printf("malloc fail\n");
        return NULL;
    }
    bzero(l,sizeof(Sequence));
    return l;
}

int is_full_Sequence(Sequence *l)
{
    return l->n == MAX ? 1 : 0;
}

void insert_data_sequence(Sequence*l,Datatype data)
{
    l->buf[l->n]=data;
    l->n++;
    return;
}

void printf_seqence_data(Sequence*l)
{
    int i=0;
    for(i=0;i<l->n;i++)
    {
        printf("%d ",l->buf[i]);
    }
    putchar('\n');
    return;
}

void insert_data_assign(Sequence*l,int post,int data)
{
      int set = post-1;
      int last = l->n-1;
      for(last;last>=set;last--)
      {
          l->buf[last+1]=l->buf[last];
      }
      l->buf[set]=data;
      l->n++;
      return;
}

void delete_data_sequence(Sequence*l,Datatype data)
{
     int i=0,j=0;
     for(i=0;i<l->n;i++)
     {
         if(l->buf[i] != data)
         {
          l->buf[j] = l->buf[i];
          j++;
         }
     }
     l->n--;
     return;
}

void sort_data_sequence(Sequence*l)
{
    int i=0,j=0;
    int t =0;
    for(i=0;i<l->n-1;i++)
    {
        for(j=0;j<l->n-1-i;j++)
        {
            if(l->buf[j]>l->buf[j+1])
            {
                t=l->buf[j+1];
                l->buf[j+1]=l->buf[j];
                l->buf[j] = t;
            }
        }
    }
    return;
}

int main(int argc, const char *argv[])
{
    Sequence *l=NULL;
    Datatype buf[]={10,20,30,40,50,60,70};
    l=create_empty_seqlite();
    int i = 0;
    for(i=0;i<sizeof(buf)/sizeof(buf[0]);i++)
    {
        insert_data_sequence(l,buf[i]);
    }
    printf_seqence_data(l);

    insert_data_assign(l,3,1);
    printf_seqence_data(l);
 
    delete_data_sequence(l,20);
    printf_seqence_data(l);

    sort_data_sequence(l);
    printf_seqence_data(l);

    return 0;
}