如何创建顺序表以及对标的一些操作

# include <stdio.h>
# include<string.h>
# include<memory.h>
# include<assert.h>
# define MAX_SIZE 100
typedef int DataType;
typedef struct SeqList
{
 DataType arry[MAX_SIZE];
 size_t size;
}SeqList;//定义一个结构体顺序表
void InitSeqList(SeqList * pSeq)
{
    memset(pSeq->arry,0,sizeof(DataType)*MAX_SIZE);//初始化顺序表
 pSeq->size=0;

}
void PushBack(SeqList *pSeq,DataType x)
{
 assert(pSeq);
 if(pSeq->size>=MAX_SIZE)
 {
  printf("The SeqLiist is full");//一个个的对顺序表赋值
  return ;
 }
    pSeq->arry[pSeq->size++]=x;
}

void PopBack(SeqList *pSeq)
{
 assert(pSeq);
 pSeq->size--;//一个个的从末尾删除
}
void Erase(SeqList *s,size_t pos)
{
 assert(s);
 if(pos>=s->size)
 {
  printf("over the max data!");
  return;
 }
 while(pos++<(s->size-1))
 {
  s->arry[pos]=s->arry[pos+1];//删除指定位置的值
 }
}
void Remove(SeqList *s,DataType x)
{
   assert(s);
   DataType i,j;//删除第一个x
   for(i=0;i<s->size;i++)
   {
    if(x==s->arry[i])
    {
     break;
    }
   }
   if((i==s->size-1)&&(s->arry[i]!=x))
   {
    printf("顺序表中没有找到x");
   }
   else
   {
    for(j=i;j<s->size;j++)
    {
     s->arry[i]=s->arry[i+1];
    }
   }
   s->size--;
}
void RemoveAll(SeqList*s,DataType x)
{
  int i,j,count=0;
  assert(s);//删除所有的x
 
 for(i=0;i<s->size;i++)
 {
     if(x==s->arry[i])
    {
    for(j=i;j<s->size;j++)
    {
     s->arry[i]=s->arry[i+1];
    }
    count++;
    }
  else
  {
        if((i==s->size-1)&&(s->arry[i]!=x)&&(count==0))
  {
      printf("顺序表中没有找到x");
  }

  }
   }
 s->size=s->size-count;
}
 void Sort(SeqList *s)
 {  assert(s);
 int i,j,temp;//冒泡排序
 for(i=0;i<s->size;i++)
 {
  for(j=s->size-1;j>=i;j--)
        {
   if(s->arry[j]<s->arry[j-1])
   {
    temp=s->arry[j];
    s->arry[j]=s->arry[j-1];
    s->arry[j-1]=temp;
    
   }
  }
 }
}
void output(SeqList *s)
{
 assert(s);
 int i=0;
 for(i=0;i<s->size;i++)
 {
  printf("%d ",s->arry[i]);
 }

}
int main()
{
 SeqList L;
    InitSeqList(&L);
 PushBack(&L,3);
 PushBack(&L,7);
 PushBack(&L,1);
 PushBack(&L,12);
 PushBack(&L,3);
 PushBack(&L,3);
 PushBack(&L,2);
 PushBack(&L,1);
 PopBack(&L);
 Erase(&L,1);
 Remove(&L,12);
 RemoveAll(&L,3);
    Sort(&L);
 output(&L);
 return (0);
}


本文出自 “It技术笔记” 博客,谢绝转载!

你可能感兴趣的:(如何创建顺序表以及对标的一些操作)