#pragma once
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
#include<string.h>
typedef int DataType;
typedef struct SeqList
{
DataType* _array;
size_t _size;
size_t _capacity;
}SeqList;
void IniSeqList(SeqList* pSeq)
{
assert(pSeq);
pSeq->_capacity =3;
pSeq->_array =(DataType*)malloc(sizeof(DataType)*pSeq->_capacity );
pSeq->_size =0;
}
void PrintSeqList(SeqList* pSeq)//打印
{
int i=0;
assert(pSeq);
for(;i<pSeq->_size ;i++)
{
printf(" %d ",pSeq->_array [i]);
}
printf("\n");
}
void checkempty(SeqList* pSeq)//判断是否为空
{
assert(pSeq);
if(pSeq->_size ==0)
{
printf("SeqList is empty\n");
return;
}
}
void CheckCap(SeqList* pSeq)//增容
{
if(pSeq->_size >=pSeq->_capacity )
{
DataType* tmp;
pSeq->_capacity *=2;
tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity );
memcpy(tmp,pSeq->_array ,sizeof(DataType*)*pSeq->_size );
free(pSeq->_array );
pSeq->_array =tmp;
}
}
void PushBack(SeqList* pSeq,DataType x)//尾插
{
assert(pSeq);
CheckCap(pSeq);
pSeq->_array [pSeq->_size ++]=x;
}
void PopBack(SeqList* pSeq)//尾删
{
assert(pSeq);
--pSeq->_size ;
}
void PushFront(SeqList* pSeq,DataType x)//头插
{
int i=pSeq->_size ;
assert(pSeq);
CheckCap(pSeq);
for(;i>=0;i--)
{
pSeq->_array [i+1]=pSeq->_array [i];
}
pSeq->_array [0]=x;
++pSeq->_size ;
}
void PopFront(SeqList* pSeq)//头删
{
int i=1;
assert(pSeq);
checkempty(pSeq);
for(;i<=pSeq->_size ;i++)
{
pSeq->_array [i-1]=pSeq->_array [i];
}
pSeq->_size-- ;
}
void Insert(SeqList* pSeq,size_t pos,DataType x)//任意位置插入
{
int i=pSeq->_size;
assert(pSeq);
CheckCap(pSeq);
for(;i>=(int)pos;--i)
{
pSeq->_array [i]=pSeq->_array [i-1];
}
pSeq->_array [pos]=x;
pSeq->_size ++;
}
void Erase(SeqList* pSeq,size_t pos)//橡皮擦
{
int i=pos ;
assert(pSeq);
checkempty(pSeq);
for(;i<pSeq->_size ;i++)
{
pSeq->_array [i]=pSeq->_array [i+1];
}
pSeq->_size --;
}
void Remove(SeqList* pSeq,DataType x)//对应位置删除
{
int i=0;
int begin=0;
assert(pSeq);
checkempty(pSeq);
for(;i<pSeq->_size ;i++)
{
if(pSeq->_array [i]==x)
{
begin=i;
for(;begin<pSeq->_size ;begin++)
{
pSeq->_array [begin]=pSeq->_array [begin+1];
}
}
}
--pSeq->_size;
}
void RemoveALL(SeqList* pSeq,DataType x)//删除所有x
{
int count=0;
size_t first=0;
size_t second=0;
assert(pSeq);
checkempty(pSeq);
while(second<pSeq->_size )
{
if(pSeq->_array [second]==x)
{
count++;
}
else
{
pSeq->_array [first]=pSeq->_array [second];
first++;
}
second++;
}
pSeq->_size -=count;
}
#include"SeqList_D.h"
void Test1()
{
SeqList s;
IniSeqList(&s);
PushBack(&s,1);//尾插
PushBack(&s,2);
PushBack(&s,3);
PushBack(&s,4);
PushBack(&s,5);
PrintSeqList(&s);//打印
PushFront(&s,2);//头插
PrintSeqList(&s);//打印
PopFront(&s);//头删
PrintSeqList(&s);//打印
}
void Test2()
{
SeqList s;
IniSeqList(&s);
PushBack(&s,1);//尾插
PushBack(&s,2);
PushBack(&s,3);
PushBack(&s,4);
PushBack(&s,6);
PushBack(&s,2);
PushBack(&s,2);
PushBack(&s,5);
PrintSeqList(&s);//打印
//Erase(&s,2);//橡皮擦
//PrintSeqList(&s);//打印
//Remove(&s,2);//对应位置删除
//PrintSeqList(&s);//打印
RemoveALL(&s,2);//删除所有x
PrintSeqList(&s);//打印
}
int main()
{
Test2();
system("pause");
return 0;
}
转载于:https://blog.51cto.com/760470897/1753227