# pragma once
# include "SeqList.h"
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <assert.h>
# define ARRAYSIZE 100
typedef int DataType;
typedef struct SeqList
{
int array[ARRAYSIZE];
int size;
}SeqList;
// 尾部插入
void SeqListPushBack(SeqList *p, DataType data);
// 头部插入
void SeqListPushFront(SeqList *p, DataType data);
// 尾部删除
void SeqListPopBack(SeqList *p);
// 头部删除
void SeqListPopFront(SeqList *p);
// 按下标插入,pos 的范围是 [0, size]
void SeqListInsert(SeqList *p, int pos, DataType data);
// 按下标删除,pos 的范围是 [0, size)
void SeqListErase(SeqList *p, int pos);
// 按值删除,只删遇到的第一个
void SeqListRemove(SeqList *p, DataType data);
// 按值删除,删除所有的
void SeqListRemoveAll(SeqList *p, DataType data);
// 清空
void SeqListClear(SeqList *p);
// 按值查找,返回第一个找到的下标,如果没找到,返回 -1
int SeqListFind(SeqList *p, DataType data);
// 判断是否为空,1 表示空, 0 表示不空
int SeqListEmpty(SeqList *p);
// 返回数量
int SeqListSize(SeqList *p);
// 销毁
void SeqListDestroy(SeqList *p);
//快速排序
void SeqListSelectSort(SeqList* p);
//冒泡排序
void SeqListSort(SeqList* p);
//测试
void SeqListText();
//交换
void Swap(DataType *dest, DataType *src);
//显示
void SeqListShow(SeqList* p);
SeqList.c 文件
# include "SeqList.h"
// 交换
void Swap(DataType *dest, DataType *src)
{
char tmp = 0;
assert(dest&&src);
tmp = *dest;
*dest = *src;
*src = tmp;
}
//初始化
void SeqListInit(SeqList* p)
{
memset(p->array, 0, sizeof(DataType)*ARRAYSIZE);
p->size = 0;
}
// 尾部插入
void SeqListPushBack(SeqList *p, DataType data)
{
assert(p != NULL);
if (p->size == ARRAYSIZE)
{
printf("顺序表已满\n");
return;
}
p->array[p->size] = data;
p->size++;
}
// 头部插入
void SeqListPushFront(SeqList *p, DataType data)
{
assert(p != NULL);
int i = 0;
if (p->size == ARRAYSIZE)
{
printf("顺序表已满\n");
return;
}
for (i = p->size; i >= 0; i--)
{
p->array[i] = p->array[i - 1];
}
p->array[0] = data;
p->size++;
}
// 尾部删除
void SeqListPopBack(SeqList *p)
{
assert(p != NULL);
p->size--;
}
// 头部删除
void SeqListPopFront(SeqList *p)
{
assert(p != NULL);
int i = 0;
for (i = 0; i < p->size - 1; i++)
p->array[i] = p->array[i + 1];
p->size--;
}
// 按值查找,返回第一个找到的下标,如果没找到,返回 -1
int SeqListFind(SeqList *p, DataType data)
{
int i = 0;
assert(p);
for (i = 0; i < p->size; i++)
{
if (p->array[i] == data)
return i;//返回下标
}
return -1;//没有找到
}
// 按下标插入,pos 的范围是 [0, size]
void SeqListInsert(SeqList *p, int pos, DataType data)
{
assert(p != NULL);
assert(0<= pos <= p->size);
int i = 0;
if (p->size == ARRAYSIZE)
{
printf("顺序表已满\n");
return;
}
for (i = p->size; i >= pos; i--)
p->array[i] = p->array[i - 1];
p->array[pos-1] = data;
p->size++;
}
// 按下标删除,pos 的范围是 [0, size)
void SeqListErase(SeqList *p, int pos)
{
assert(p != NULL);
assert(0 <= pos < p->size);
int i = 0;
for (i = pos; i < p->size-1; i++)
p->array[i] = p->array[i + 1];
p->size--;
}
// 按值删除,只删遇到的第一个
void SeqListRemove(SeqList *p, DataType data)
{
int ret= SeqListFind(p, 1);
if (ret != -1)
{
SeqListErase(p, ret);
}
}
// 按值删除,删除所有的
void SeqListRemoveAll(SeqList *p, DataType data)
{
assert(p);
int i = 0,j=0,count=0;
for (i = 0; i < p->size; i++)
{
if (p->array[i] == data)
count++;
else
{
p->array[j] = p->array[i];
j++;
}
}
p->size -= count;
}
// 清空
void SeqListClear(SeqList *p)
{
memset(p->array, 0, sizeof(DataType)*ARRAYSIZE);
p->size = 0;
}
// 销毁
void SeqListDestroy(SeqList *p)
{
free(p);
p->size = 0;
p = NULL;
}
//冒泡排序
void SeqListSort(SeqList* p)
{
int end = p->size-1;
while (end >= 0)
{
int i = 0;
int exchange = 0;
for (i = 0; i < end; i++)
{
if (p->array[i]>p->array[i + 1])
Swap(&p->array[i], &p->array[i+1]);
exchange = 1;
}
if (exchange = 0)
break;
end--;
}
}
//快速排序
void SeqListSelectSort(SeqList* p)
{
int left = 0, right = p->size-1;
int max = 0, min = 0;
for (; left<right;)
{
int i = left;
for (; i <= right; i++)
{
if (p->array[i]>p->array[max])
max = i;
if (p->array[i] < p->array[min])
min = i;
}
Swap(&p->array[max], &p->array[right]);
Swap(&p->array[min], &p->array[left]);
left++;
right--;
}
}
// 判断是否为空,1 表示空, 0 表示不空
int SeqListEmpty(SeqList *p)
{
return p->size == 0 ? 1 : 0;
}
// 返回数量
int SeqListSize(SeqList *p)
{
return p->size;
}
//显示
void SeqListShow(SeqList* p)
{
assert(p != NULL);
int i = 0;
for (i = 0; i < p->size; i++)
{
printf("%d", p->array[i]);
}
printf("\n");
}
//测试
void SeqListTest()
{
SeqList s;
SeqListInit(&s);
SeqListPushFront(&s, 1);
SeqListPushFront(&s, 2);
SeqListPushFront(&s, 6);
SeqListPushFront(&s, 1);
SeqListSelectSort(&s);
SeqListShow(&s);
/*SeqListRemoveAll(&s, 1);*/
SeqListSort(&s);
/*SeqListRemove(&s, 1);*/
/*SeqListInsert(&s, 2, 6);*/
SeqListShow(&s);
/*SeqListPopFront(&s);
SeqListShow(&s);
SeqListShow(&s);
SeqListErase(&s, 2);
SeqListShow(&s);
SeqListPopFront(&s);
SeqListShow(&s);*/
}
测试文件 test.c
# include "SeqList.h"
int main()
{
SeqListTest();
system("pause");
return 0;
}