头文件如下:
#ifndef _S_L
#define _S_L
#include <stdio.h>
#include <assert.h>
#include <string.h>
#pragma warning(disable:4996)
#define MAX_SIZE 10
typedef int DataType;
typedef struct SeqList
{
DataType array[MAX_SIZE];//存储数据的数组
size_t size;//有效数据的个数
}SeqList;
void InitSeqList(SeqList* seq);//初始化
void DestorySeqList(SeqList* seq);//销毁
void PrintSeqList(SeqList* seq);//输出
void PushBack(SeqList* seq, DataType x);//尾插
void PopBack(SeqList* seq);//尾删
void PushFront(SeqList* seq, DataType x);//头插
void PopFront(SeqList* seq);//头删
void Insert(SeqList* seq, size_t pos, DataType x); // 指定位置添加数据
int Find(SeqList* seq, DataType x);//查找数据X
int Erase(SeqList* seq, size_t pos);//按位置查找数据
void Remove(SeqList* seq, DataType x);//删除一个数据X
void RemoveAll(SeqList* seq, DataType x);//删除所有X
void BubbleSort(SeqList* seq);//冒泡
void SelectSort(SeqList* seq);//选择
void InsertSort(SeqList* seq);//插入排序
int BinaryInsert(SeqList* seq, DataType x);//二分查找
#endif
源文件如下:
#include "seqlist.h"
void InitSeqList(SeqList* seq)//初始化
{
assert(seq);
memset(seq->array, 0, MAX_SIZE*sizeof(DataType));
seq->size = 0;
}
void DestorySeqList(SeqList* seq)//销毁
{
assert(seq);
seq->array[seq->size] = NULL;
seq->size = 0;
}
void PrintSeqList(SeqList* seq)//输出数据
{
assert(seq);
for (size_t i = 0; i < seq->size; i++)
{
printf("%d ", seq->array[i]);
}
printf("\n");
}
void PushBack(SeqList* seq, DataType x)//尾插
{
assert(seq);
if (seq->size == MAX_SIZE)
{
printf("manle");
}
else
{
seq->array[seq->size] = x;
seq->size++;
}
}
void PopBack(SeqList* seq)//尾删
{
assert(seq);
if (seq->size == 0)
{
printf("shujuweikong");
}
else
{
seq->array[seq->size - 1] = NULL;
seq->size--;
}
}
void PushFront(SeqList* seq, DataType x)//头插
{
assert(seq);
if (seq->size == MAX_SIZE)
{
printf("manle");
}
else
{
size_t i = seq->size;
while (i>0)
{
seq->array[i] = seq->array[i - 1];
i--;
}
seq->array[0] = x;
(seq->size)++;
}
}
void PopFront(SeqList* seq)//头删
{
assert(seq);
if (seq->size == 0)
{
printf("shujuweikong");
}
else
{
size_t i = 0;
while (i<(seq->size))
{
seq->array[i] = seq->array[i + 1];
i++;
}
(seq->size)--;
}
}
void Insert(SeqList* seq, size_t pos, DataType x) // 指定位置添加数据
{
assert(seq);
if (seq->size == MAX_SIZE)
{
printf("manle");
}
else
{
size_t i = seq->size;
while (i>pos)
{
seq->array[i] = seq->array[i - 1];
i--;
}
seq->array[pos] = x;
(seq->size)++;
}
}
int Find(SeqList* seq, DataType x)//查找数据X
{
assert(seq);
for (size_t i = 0; i < seq->size; i++)
{
if (seq->array[i] == x)
{
return seq->array[i];
}
}
return -1;
}
int Erase(SeqList* seq, size_t pos)//按位置查找数据
{
assert(seq);
if (pos < (seq->size)&& pos >= 0)
{
return seq->array[pos];
}
return -1;
}
void Remove(SeqList* seq, DataType x)//删除一个数据X
{
assert(seq);
if (seq->size == 0)
{
printf("shibai");
}
else
{
size_t i = 0;
while (i< seq->size)
{
if (seq->array[i] == x)
{
while (i < seq->size)
{
seq->array[i] = seq->array[i + 1];
i++;
}
}
else
i++;
}
(seq->size)--;
}
}
void RemoveAll(SeqList* seq, DataType x)//删除所有X
{
assert(seq);
if (seq->size == 0)
{
printf("shibai");
}
else
{
int tmp = 0;
int count = 0;
size_t i = 0;
while (tmp < seq->size)
{
if (seq->array[tmp] == x)
{
tmp++;
count++;
}
else
{
seq->array[i] = seq->array[tmp];
i++;
tmp++;
}
}
seq->size = seq->size - count;
}
}
void BubbleSort(SeqList* seq)//冒泡排序
{
assert(seq);
if (seq->size == 0)
{
return;
}
for (int i = 1;i<seq->size;i++)
{
for (int j = 0; j < seq->size-i; j++)
{
if (seq->array[j] > seq->array[j+1])
{
int tmp = seq->array[j];
seq->array[j] = seq->array[j+1];
seq->array[j+1] = tmp;
}
}
}
}
void SelectSort(SeqList* seq)//选择排序
{
assert(seq);
if (seq->size == 0)
{
return;
}
for (int i = 0; i < seq->size-1;i++)
{
int max = i;
for (int j = i; j < seq->size; j++)
{
if (seq->array[max] < seq->array[j])
{
max = j;
}
}
if (max!= i)
{
int tmp = seq->array[i];
seq->array[i] = seq->array[max];
seq->array[max] = tmp;
}
}
}
void InsertSort(SeqList* seq)//插入排序
{
assert(seq);
if (seq->size == 0)
{
return;
}
int j = 0;
for (int i = 1; i < seq->size; i++)
{
int tmp = seq->array[i];
for (j = i - 1; j >=0;j--)
{
if (tmp < seq->array[j])
{
seq->array[j + 1] = seq->array[j];
}
else
{
break;
}
}
seq->array[j + 1] = tmp;
}
}
int BinaryInsert(SeqList* seq, DataType x)//二分查找
{
assert(seq);
int low = 0;
int high =seq->size-1;
while (low<high)
{
int mid = (low + high) / 2;
if (x>seq->array[mid])
{
low = mid+1;
}
else if (x<seq->array[mid])
{
high = mid - 1;
}
else
{
return mid;
}
}
return -1;
}