代码实现顺序表的操作函数
// 值类型
typedef int DataType;
typedef struct SeqList {
DataType data; // 值
int size; // 数量
} SeqList;
// 初始化
void SeqListInit(SeqList *pSL);
// 尾部插入
void SeqListPushBack(SeqList *pSL, DataType data);
// 头部插入
void SeqListPushFront(SeqList *pSL, DataType data);
// 尾部删除
void SeqListPopBack(SeqList *pSL);
// 头部删除
void SeqListPopFront(SeqList *pSL);
// 按下标插入,pos 的范围是 [0, size]
void SeqListInsert(SeqList *pSL, int pos, DataType data);
// 按下标删除,pos 的范围是 [0, size)
void SeqListErase(SeqList *pSL, int pos);
// 按值删除,只删遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data);
// 按值删除,删除所有的
void SeqListRemoveAll(SeqList *pSL, DataType data);
// 清空
void SeqListClear(SeqList *pSL);
// 按值查找,返回第一个找到的下标,如果没找到,返回 -1
int SeqListFind(SeqList *pSL, DataType data);
// 判断是否为空,1 表示空, 0 表示不空
int SeqListEmpty(SeqList *pSL);
// 返回数量
int SeqListSize(SeqList *pSL);
// 销毁
void SeqListDestroy(SeqList *pSL);
#ifndef SCQLIST_H_
#define SCQLIST_H_
#endif
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
typedef int DataType;
#define MAX_SIZE (100)
typedef struct SeqList {
DataType array[MAX_SIZE]; // 存数据的空间
int size; // 1) 有效数据有多少个 2) 当前可用的数组下标
} SeqList;
// 初始化
void SeqListInit(SeqList *pSL);
// 销毁
void SeqListDestroy(SeqList *pSL);
// 增删改查
// 增
// 尾插
void SeqListPushBack(SeqList *pSL, DataType data);
// 头插
void SeqListPushFront(SeqList *pSL, DataType data);
// 根据下标插入
void SeqListInsert(SeqList *pSL, int pos, DataType data);
// 删
// 尾删
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 SeqListUpdate(SeqList *pSL, int pos, DataType data);
// 查询
// 返回遇到的第一个下标,如果没有遇到,返回 -1
int SeqListFind(SeqList *pSL, DataType data);
//从小到大排序
void SeqListSort(SeqList *pSL);
//初始化
void SeqListInit(SeqList *pSL)
{
assert(pSL != NULL);
pSL->size = 0;
}
// 销毁
void SeqListDestroy(SeqList *pSL)
{
assert(pSL != NULL);
pSL->size = 0;
}
// 尾插
void SeqListPushBack(SeqList *pSL, DataType data)
{
assert(pSL != NULL);
assert(pSL->size<MAX_SIZE);
pSL->array[pSL->size] = data;
pSL->size++;
}
// 头插
void SeqListPushFront(SeqList *pSL, DataType data)
{
assert(pSL != NULL);
assert(pSL->size > 0);
int i;
for (i = pSL->size; i> 0; i--)
{
pSL->array[i] = pSL->array[i-1];
}
pSL->array[0] = data;
pSL->size++;
}
// 根据下标插入
void SeqListInsert(SeqList *pSL, int pos, DataType data)
{
assert(pSL != NULL);
assert(pSL->size > pos);
int i;
for (i = pSL->size; i> pos; i--)
{
pSL->array[i] = pSL->array[i - 1];
}
pSL->array[pos] = data;
pSL->size++;
}
// 尾删
void SeqListPopBack(SeqList *pSL)
{
assert(pSL != NULL);
assert(pSL->size > 0);
pSL->size--;
}
// 头删
void SeqListPopFront(SeqList *pSL)
{
assert(pSL != NULL);
int i = 0;
for (i = 0; i < pSL->size-1; i++)
{
pSL->array[i] = pSL->array[i + 1];
}
pSL->size--;
}
// 根据下标删除
void SeqListErase(SeqList *pSL, int pos)
{
assert(pSL!=NULL);
assert(pSL->size>0);
int i;
for (i = pos; i < pSL->size - 1; i++)
{
pSL->array[i] = pSL->array[i + 1];
}
pSL->size--;
}
// 根据数据删除,只删除遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data)
{
int ret = SeqListFind(pSL,data);
if (ret == -1)
{
SeqListErase(pSL, ret);
}
}
// 根据数据删除,删除所有遇到的
void SeqListRemoveAll(SeqList *pSL, DataType data)
{
int i = 0;
int ret=SeqListFind(pSL,data);
for (i = 0; i < pSL->size; i++)
{
if (pSL->array[i] == pSL->array[ret])
{
SeqListErase(pSL, i);
}
}
}
// 根据下标更新
void SeqListUpdate(SeqList *pSL, int pos, DataType data)
{
int i = pos;
pSL->array[i] = data;
}
// 查询
// 返回遇到的第一个下标,如果没有遇到,返回 -1
int SeqListFind(SeqList *pSL, DataType data)
{
int i = 0;
for (i = 0; i < pSL->size; i++)
{
if (pSL->array[i] == data)
{
return i;
}
}
return -1;
}
void SeqListSort(SeqList *pSL)
{
int i = 0;
int j = 0;
for (i = 0; i < pSL->size-1; i++)
{
for (j = 0; j < pSL->size - 1 - i; j++)
{
if ((pSL->array[j]>pSL->array[j + 1])>0)
{
pSL->array[j] ^= pSL->array[j + 1];
pSL->array[j + 1] ^= pSL->array[j];
pSL->array[j] ^= pSL->array[j + 1];
}
}
}
}
void SeqListprint(SeqList *pSL)
{
int i;
for (i = 0; i < pSL->size; i++)
{
printf("%d ", pSL->array[i]);
}
printf("\n");
}
void TestSeplist()
{
SeqList s1;
SeqListInit(&s1);
SeqListDestroy(&s1);
SeqListPushBack(&s1,1);
SeqListPushBack(&s1,2);
SeqListPushBack(&s1, 2);
SeqListPushBack(&s1, 2);
SeqListPushBack(&s1,3);
SeqListPushFront(&s1,4);
SeqListPushFront(&s1,5);
SeqListPushFront(&s1,6);
SeqListInsert(&s1, 0, 101);
SeqListErase(&s1, 6);
SeqListRemoveAll(&s1, 1);
SeqListSort(&s1);
SeqListprint(&s1);
}
通过mian.c函数调用实现
#include"scqlist.h"
int main()
{
TestSeplist();
system("pause");
return 0;
}