头文件seqList.h
#pragma once
typedef int DataType;
#define MAX_SIZE (100)
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
typedef struct SeqList{
DataType array[MAX_SIZE];
int size;
}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 SeqListPrint(SeqList *psl);
seqList.c
#include "seqlist.h"
void SeqListInit(SeqList *psl)
{
assert(psl);
//memset(psl->array, 0, MAX_SIZE*sizeof(DataType));
psl->size = 0;
}
//销毁
void SeqListDestroy(SeqList *psl)
{
assert(psl);
psl->size = 0;
}
//尾插
void SeqListPushBack(SeqList *psl, DataType data)
{
assert(psl);
assert(psl->size < MAX_SIZE);
psl->array[psl->size] = data;
psl->size++;
}
//头插
void SeqListPushFront(SeqList *psl,DataType data)
{
assert(psl);
assert(psl->size < MAX_SIZE);
int pos;
for (pos = psl->size-1; pos >= 0; pos--)
{
psl->array[pos+1] = psl->array[pos];
}
psl->array[0 ] = data;
psl->size++;
}
//根据下标插
void SeqListInsert(SeqList *psl, int pos, DataType data)
{
assert(psl);
assert(pos >= 0 && pos < psl->size);
int space;
for (space = psl->size; space>pos; space--)
{
psl->array[space] = psl->array[space - 1];
}
psl->array[pos] = data;
psl->size++;
}
//尾删
void SeqListPopBack(SeqList *psl)
{
psl->size--;
}
//头删
void SeqListPopFront(SeqList *psl)
{
assert(psl);
int pos;
for (pos = 1; pos < psl->size; pos++)
{
psl->array[pos-1] = psl->array[pos];
}
psl->size--;
}
//根据下标删
void SeqListErase(SeqList *psl, int pos)
{
assert(psl);
assert(pos >= 0 && pos < psl->size);
int p;
for (p = pos + 1; p < psl->size; p++)
{
psl->array[p - 1] = psl->array[p];
}
psl->size--;
}
//根据数据删除,只删除遇到的第一个
void SeqListRmove(SeqList *psl, DataType data)
{
int pos = SeqListFind(psl, data);
SeqListErase(psl, pos);
psl->size--;
}
//根据数据删除,删除所有遇到的
void SeqListRemoveAll(SeqList *psl, DataType data)
{
//调用函数
int pos;
/*while (1)
{
pos = SeqListFind(psl, data);
if (pos == -1)
{
break;
}
SeqListErase(psl, pos);
}*/
while ((pos = SeqListFind(psl, data)) != -1)
{
SeqListErase(psl, pos);
}
//DataType *newArray = (DataType*)malloc(sizeof(DataType)*psl->size);
//int i, j, k;
//for (i = 0, j = 0; i < psl->size; i++)
//{
// if (psl->array[i] != data)
// {
// newArray[j] = psl->array[i];
// j++;
// }
//
//}
//psl->size = j;
把新数组替换回旧数组
//for (k = 0; k < psl->size; k++)
//{
// psl->array[k] = newArray[k];
//}
//free(newArray);
//????
/*int i, j;
for (i = 0; j = 0, i < psl->size; i++)
{
if (psl->array[i] != data)
{
psl->array[j] = psl->array[i];
j++;
}
}
psl->size = j;*/
}
//根据下标更新
void SeqListUpdate(SeqList *psl, int pos, DataType data)
{
assert(psl);
assert(pos >= 0 && pos <= psl->size);
psl->array[pos] = data;
}
//查找函数,返回遇到的第一个下标,如果没有遇到,返回-1
int SeqListFind(SeqList *psl, DataType data)
{
assert(psl);
int i;
for (i = 0; i < psl->size; i++)
{
if (psl->array[i] == data)
{
return i;
}
}
return -1;
}
void swap(DataType *a, DataType *b)
{
DataType t = *a;
*a = *b;
*b = t;
}
//从小到大排序
void SelectOP(SeqList *psl)
{
//minspace 用来放找的最小的数的下标,maxspace用来放找的最大的数的下标
//minIndex整个数列中找到的最小的数的下标,MaxIndex整个数列中找到的最大的数的下标
int minSpace = 0;
int maxSpace = psl->size - 1;
int i;
int minIndex, maxIndex;
while (minSpace < maxSpace)
{
minIndex = minSpace;
maxIndex = maxSpace;
for (i = minSpace; i <= maxSpace; i++)//从minSpace 到maxSpace遍历,找到最小数的下标和最大数的下标
{
if (psl->array[i] < psl->array[minIndex])
{
minIndex = i;
}
if (psl->array[i]>psl->array[maxIndex])
{
maxIndex = i;
}
}
//到这里表示minIndex就是找到最小数的下标
//maxIndex就是找到最大数的下标
swap(psl->array + minIndex, psl->array + minSpace);
//特殊情况,如9,5,4,8,2
if (minSpace == maxIndex)
{
maxIndex = minIndex;
}
swap(psl->array + maxIndex, psl->array + maxSpace);
minSpace++, maxSpace--;
}
}
//
//打印
void SeqListPrint(SeqList *psl)
{
int i;
for (i = 0; i < psl->size; i++)
{
printf("%d ", psl->array[i]);
}
printf("\n");
}
主函数main.c
#include "seqlist.h"
int main()
{
SeqList sl;
SeqListInit(&sl);
SeqListPushBack(&sl, 9);
SeqListPushBack(&sl, 8);
SeqListPushBack(&sl, 4);
SeqListPushBack(&sl, 6);
SeqListPushBack(&sl, 3);
SeqListPushBack(&sl, 5);
SeqListInit(&sl, 5);
SeqListPrint(&sl);
SeqListPushBack(&sl, 8);
SeqListPrint(&sl);
SeqListPopBack(&sl);
SeqListPrint(&sl);
SeqListPopFront(&sl);
SeqListPrint(&sl);
SeqListErase(&sl, 2);
SeqListPrint(&sl);
SeqListRmove(&sl, 3);
SeqListPrint(&sl);
SeqListRemoveAll(&sl, 3);
SeqListPrint(&sl);
SelectOP(&sl);
SeqListPrint(&sl);
system("pause");
return 0;
}