#include<stdio.h>
#ifndef __SEQ_LIST__
#define __SEQ_LIST__
#define MIX_SIZE 5
typedef int DataType;
typedef struct SeqList
{
DataType seqList[MIX_SIZE];
size_t size;
}SeqList;
void InitSeqList(SeqList* seq);
void PrintSeqList(SeqList* seq);
void PushBack(SeqList* seq, DataType x);
void PopBack(SeqList* seq);
void PushFront(SeqList* seq, DataType x);
void PopFront(SeqList* seq);
void Insert(SeqList* seq, size_t pos, DataType x);
int Find(SeqList* seq, DataType x);
void Erase(SeqList* seq, size_t pos);
void Remove(SeqList* seq, DataType x);
void RemoveAll(SeqList* seq, DataType x);
void Modify(SeqList* seq, size_t pos, DataType x);
#endif
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include"SeqList.h"
void InitSeqList(SeqList* seq)
{
assert(seq);
memset(seq,
0, MIX_SIZE);
seq->size =
0;
}
void PrintSeqList(SeqList* seq)
{
assert(seq);
size_t index =
0;
if (seq->size ==
0)
{
printf(
"顺序表为空!\n");
return;
}
for (; index < seq->size ; ++index)
{
printf(
"%d\n",seq->seqList[index]);
}
}
void PushBack(SeqList* seq, DataType x)
{
assert(seq);
if (seq->size > MIX_SIZE)
seq->size =
0;
if (seq->size == MIX_SIZE)
{
printf(
"顺序表已满!\n");
return;
}
seq->seqList[(seq->size)++] = x;
}
void PopBack(SeqList* seq)
{
assert(seq);
if (seq->size ==
0)
{
printf(
"顺序表已空!\n");
return;
}
--(seq->size);
}
void PushFront(SeqList* seq, DataType x)
{
int end;
assert(seq);
if (seq->size > MIX_SIZE)
seq->size =
0;
if (seq->size == MIX_SIZE)
{
printf(
"顺序表已满!\n");
return;
}
end = (seq->size)++;
for (; end >
0; --end)
{
seq->seqList[end] = seq->seqList[end -
1];
}
seq->seqList[
0] = x;
}
void PopFront(SeqList* seq)
{
size_t start =
0;
assert(seq);
if (seq->size ==
0)
{
printf(
"顺序表已空!\n");
return;
}
for (; start <seq->size; ++start)
{
seq->seqList[start] = seq->seqList[start+
1];
}
--seq->size;
}
void Insert(SeqList* seq, size_t pos, DataType x)
{
int end;
assert(seq);
if (seq->size > MIX_SIZE)
seq->size =
0;
if (pos > seq->size)
{
printf(
"不合法的插入位置!\n");
return;
}
if (seq->size == MIX_SIZE)
{
printf(
"顺序表已满!\n");
return;
}
end = (seq->size)++;
for (; end >= pos-
1; --end)
{
seq->seqList[end] = seq->seqList[end -
1];
}
seq->seqList[pos-
1] = x;
}
int Find(SeqList* seq, DataType x)
{
size_t pos =
0;
assert(seq);
for (; pos < seq->size; ++pos)
{
if (seq->seqList[pos] == x)
return pos;
}
return -
1;
}
void Erase(SeqList* seq, size_t pos)
{
size_t start =
0;
assert(seq);
if (seq->size ==
0)
{
printf(
"顺序表已空!\n");
return;
}
start = pos -
1;
for (; start <seq->size; ++start)
{
seq->seqList[start] = seq->seqList[start +
1];
}
--seq->size;
}
void Remove(SeqList* seq, DataType x)
{
int tag =
0;
assert(seq);
if (seq->size ==
0)
{
printf(
"顺序表为空!\n");
return;
}
size_t index =
0;
for (; index < seq->size; ++index)
{
if (seq->seqList[index] == x)
{
for (; index < seq->size; ++index)
{
seq->seqList[index] = seq->seqList[index +
1];
}
--seq->size;
tag =
1;
}
}
if (tag ==
0)
printf(
"未找到该元素!\n");
}
void RemoveAll(SeqList* seq, DataType x)
{
size_t pos =
0,start=
0;
assert(seq);
if (seq->size ==
0)
{
printf(
"顺序表为空!\n");
return;
}
for (; pos < seq->size; ++pos)
{
if (seq->seqList[pos] == x)
{
for (start = pos; start < seq->size; ++start)
{
seq->seqList[start] = seq->seqList[start +
1];
}
--seq->size;
--pos;
}
}
}
void Modify(SeqList* seq, size_t pos, DataType x)
{
assert(seq);
if (pos > seq->size)
{
printf(
"不合法的插入位置!\n");
return;
}
seq->seqList[pos-
1] = x;
}
#include"SeqList.h"
void test2(SeqList * seq)
{
PushFront(seq,
0);
PushFront(seq,
3);
PushFront(seq,
3);
PushFront(seq,
3);
Insert(seq,
2,
4);
PrintSeqList(seq);
printf(
"%d\n",Find(seq,
5));
PrintSeqList(seq);
RemoveAll(seq,
3);
PrintSeqList(seq);
}
int main()
{
SeqList seq;
test2(&seq);
return 0;
}