#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <assert.h>
#include <string.h>
#define MAX 10
typedef int DataType;
typedef struct SeqList
{
DataType data[MAX];
int sz;
}SeqList, *pSeqList;
void InitSeqList(pSeqList ps)//初始化
{
ps->sz = 0;
memset(ps->data, 0, MAX*sizeof(DataType));
}
void PushBack(pSeqList ps, DataType d)//在后面添加数据
{
assert(ps);
if (ps->sz == MAX)
{
return;
}
ps->data[ps->sz] = d;
ps->sz++;
}
void PopBack(pSeqList ps)//删除后面的数据
{
assert(ps);
if (ps->sz == 0)
{
return;
}
ps->sz--;
}
void Display(const pSeqList ps)//打印顺序表
{
assert(ps);
int i;
for (i = 0; i < ps->sz; i++)
{
printf("%d ", ps->data[i]);
}
printf("\n");
}
void PushFront(pSeqList ps, DataType d)//在前面添加数据
{
assert(ps);
if (ps->sz == MAX)
{
return;
}
//ps->data[ps->sz] = d;
memmove(ps->data + 1, ps->data, ps->sz*sizeof(DataType));
ps->data[0] = d;
ps->sz++;
}
void PopFront(pSeqList ps)//删除前面的数据
{
assert(ps);
if (ps->sz == 0)
{
return;
}
memmove(ps->data, ps->data + 1, ps->sz*sizeof(DataType));
ps->sz--;
}
int Find(pSeqList ps, DataType d)//查找
{
assert(ps);
int i;
for (i = 0; i < ps->sz; i++)
{
if (d == ps->data[i])
return i;
}
return -1;
}
void Insert(pSeqList ps, DataType d, int pos)//插入
{
assert(ps);
if (ps->sz == MAX)
{
return;
}
if (pos >= ps)
{
return;
}
memmove(ps->data + pos + 1, ps->data + pos, (ps->sz - pos)*sizeof(DataType));
ps->data[pos] = d;
ps->sz++;
}
void Remove(pSeqList ps, DataType d)//删除一个数据
{
assert(ps);
int i;
if (ps->sz == 0)
{
return;
}
for (i = 0; i < ps->sz; i++)
{
if (ps->data[i] == d)
{
if (i >= ps->sz - 1)
{
PopBack(ps);
}
else
{
memmove(ps->data[i + 1], ps->data[i], (ps->sz - i)*sizeof(DataType));
ps->sz--;
}
return;
}
}
}
void RemoveAll(pSeqList ps, DataType d)//删除所有的
{
assert(ps);
int i = 0;
if (ps->sz == 0)
{
return;
}
while (i < ps->sz)
{
if (ps->data[i] == d)
{
if (i >= ps->sz - 1)
{
PopBack(ps);
}
else
{
memmove(ps->data + i+ 1, ps->data + i, (ps->sz - i)*sizeof(DataType));
ps->sz--;
}
i--;
}
i++;
}
}
void Reverse(pSeqList ps)//反转
{
assert(ps);
DataType tmp;
int i;
for (i = 0; i <= ps->sz - i - 1; i++)
{
tmp = ps->data[i];
ps->data[i] = ps->data[ps->sz - i - 1];
ps->data[ps->sz - i - 1] = tmp;
}
}
void Sort(pSeqList ps)//排序 从小到大
{
assert(ps);
int i, j;
DataType tmp, ret;
for (i = 0; i < ps->sz; i++)
{
tmp = i;
for (j = 1; j < ps->sz - i; j++)
{
if (ps->data[i + j] < ps->data[i])
tmp = i + j;
}
ret = ps->data[i];
ps->data[i] = ps->data[tmp];
ps->data[tmp] = ret;
}
}
int main()
{
SeqList head;
InitSeqList(&head);
PushFront(&head, 1);
PushFront(&head, 4);
PushFront(&head, 6);
PushFront(&head, 6);
PushFront(&head, 3);
PushFront(&head, 2);
PushFront(&head, 7);
PushFront(&head, 1);
PushFront(&head, 6);
PushFront(&head, 8);
PopFront(&head);
PopFront(&head);
PopFront(&head);
Display(&head);
Sort(&head);
Display(&head);
Reverse(&head);
Display(&head);
RemoveAll(&head,1);
Display(&head);
printf("%d\n", Find(&head, 3));
Insert(&head, 7, 3);
Display(&head);
system("pause");
return 0;
}