#define MAX_SIZE 1000
#include <stdio.h>
#include <assert.h>
typedef int DataType;
typedef struct SeqList
{
DataType array[MAX_SIZE];
int size;//1.下标 2.顺序表中的元素个数
}SeqList;
void SeqPrint(SeqList *pSL);//打印顺序表
void SeqListinit(SeqList *pSL);//初始化
void SeqListPushBack(SeqList *pSL, DataType data);//尾部插入
void SeqListPushFront(SeqList *pSL, DataType data);//头插
void SeqListInsert(SeqList *pSL, int pos, DataType data);//指定处插入,此处pos是逻辑顺序
void SeqListPopBack(SeqList *pSL);//尾删
void SeqListPopFront(SeqList *pSL);//头删
void SeqListErase(SeqList *pSL, int pos);//按下标删除
void SeqListRemove(SeqList *pSL, DataType data);//删除第一个遇到的值
void SeqListRemoveAll(SeqList *pSL, DataType data);//删除所有值
void SeqListClear(SeqList *pSL);
int SeqListFind(SeqList *pSL, DataType data);//返回下标
int SeqListEmpty(SeqList *pSL);//是否为空表
int SeqListSize(SeqList *pSL);//返回表的大小
void SeqListSort(SeqList *pSL);//选择排序
#include "SeqList.h"
void SeqPrint(SeqList *pSL)//打印顺序表
{
int i = 0;
for (i; i < pSL->size; i++)
{
printf("%d, ", pSL->array[i]);
}
printf("\n");
}
void SeqListinit(SeqList *pSL)//初始化
{
assert(pSL);
pSL->size = 0;
}
void SeqListPushBack(SeqList *pSL, DataType data)//尾部直接插入
{
assert(pSL);
if (pSL->size == MAX_SIZE)
{
printf("表满");
return;
}
else
{
pSL->array[pSL->size++] = data;
}
}
void SeqListPushFront(SeqList *pSL, DataType data)//头插,数据元素要向后移动
{
int i;
assert(pSL);
if (pSL->size == MAX_SIZE)
{
printf("list full");
return;
}
else
{
pSL->size++;
/*for (i = 0; i < pSL->size; i++)
{
pSL->array[pSL->size-i] = pSL->array[pSL->size-i-1];
}
pSL->array[pSL->size-i] = data;*/
for (i = pSL->size; i > 0; i--)
{
pSL->array[i] = pSL->array[i - 1];
}
pSL->array[0] = data;
}
}
void SeqListInsert(SeqList *pSL, int pos, DataType data)//指定处插入,此处pos是逻辑顺序
{
int i;
assert(pSL);
assert(pos >= 0 && pos <= pSL->size);
if (pSL->size == MAX_SIZE)
{
printf("list full");
return;
}
else
{
pSL->size++;
for (i = 0; i < pSL->size - pos + 1; i++)
{
pSL->array[pSL->size - i] = pSL->array[pSL->size - i - 1];
}
pSL->array[pSL->size - i] = data;
/*for (i = pSL->size; i >= pos ; i--)
{
pSL->array[i] = pSL->array[i-1];
}
pSL->array[pos - 1] = data;*/
}
}
void SeqListPopBack(SeqList *pSL)//尾删
{
assert(pSL);
pSL->size--;
}
void SeqListPopFront(SeqList *pSL)//头删
{
int i;
assert(pSL);
pSL->size--;
for (i = 0; i < pSL->size; i++)
{
pSL->array[i] = pSL->array[i + 1];
}
}
void SeqListErase(SeqList *pSL, int pos)//按下标删除
{
int i;
assert(pSL);
assert(pos >= 0 && pos <= pSL->size);
pSL->size--;
for (i = 0; i < pSL->size - pos; i++)
{
pSL->array[pos + i] = pSL->array[pos + i + 1];
}
}
void SeqListRemove(SeqList *pSL, DataType data)//删除第一个遇到的值
{
int i, tmp;
assert(pSL);
for (i = 0; i < pSL->size; i++)
{
if (pSL->array[i] == data)
{
tmp = i;
break;
}
}
pSL->size--;
for (i = 0; i < pSL->size - tmp; i++)
{
pSL->array[tmp + i] = pSL->array[tmp + i + 1];
}
}
void SeqListRemoveAll(SeqList *pSL, DataType data)//删除所有值
{
int i, j;
int count = 0;
assert(pSL);
for (i = 0, j = 0; i < pSL->size; i++)
{
if (pSL->array[i] == data)
{
continue;
}
else
{
pSL->array[j] = pSL->array[i];
count++;
j++;
}
}
pSL->size = count;
}
int SeqListFind(SeqList *pSL, DataType data)//返回第一个指定数据元素的下标
{
int i;
assert(pSL);
for (i = 0; i < pSL->size; i++)
{
if (pSL->array[i] == data)
return i;
}
}
int SeqListEmpty(SeqList *pSL)//是否为空表
{
assert(pSL);
if (pSL->size == 0)
return 1;
else
return 0;
}
int SeqListSize(SeqList *pSL)//返回表的大小
{
assert(pSL);
return pSL->size;
}
void swap(DataType *p, DataType *pp)
{
DataType tmp = *p;
*p = *pp;
*pp = tmp;
}
void SeqListSort(SeqList *pSL)//选择排序
{
int mindex, maxdex;
int start, end;
int i;
assert(pSL);
for (start = 0, end = pSL->size - 1; start <= end; start++, end--)
{
mindex = start;
maxdex = start;
for (i = start; i <= end; i++)
{
if (pSL->array[i] < pSL->array[mindex])
mindex = i;
else if (pSL->array[i] > pSL->array[maxdex])
maxdex = i;
}
swap(pSL->array + start, pSL->array + mindex);
if (maxdex == start)
maxdex = mindex;
swap(pSL->array + end, pSL->array + maxdex);
}
}