SepList.h文件
#ifndef __TEST_H__
#define __TEST_H__#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define N 100
typedef int DataType;
typedef struct SepList //定义静态结构体
{
DataType arrary[N];
size_t size;
}SepList;
void init_SepList(SepList* s); //初始化结构体数组
void printSepList(SepList* s); //打印结构体数组
void pushfront(SepList* s,DataType x); //在头部插入数据
void popfront(SepList* s); //删除头部数据
void pushback(SepList* s, DataType x); //在尾部插入数据
void popback(SepList* s); //删除尾部数据
void insert(SepList* s, size_t pos, DataType x); //在指定位置插入数据
void erase(SepList* s, size_t pos); //删除指定位置的数据
int Find(SepList* s, DataType x); //查找指定数据
void Remove(SepList* s, DataType x); //删除指定数据
void RemoveAll(SepList* s, DataType x); //删除指定的相同的所有数据
void BubbleSort(SepList* s); //使用冒泡排序排列结构体数组
void SelectSort(SepList* s); //使用选择排序排列结构体数组
int BinarySearch(SepList* s, DataType x); //使用二分查找查找指定数据
#endif
SepList.c文件
#include "test.h"
void init_SepList(SepList* s)
{
memset(s->arrary, 0, N*sizeof(DataType));
s->size = 0;
}
void pushfront(SepList* s,DataType x)
{
int i = 0;
if (s->size == N)
{
printf("通讯录已满\n");
return;
}
if (s->size == 0)
{
s->arrary[0] = x;
s -> size++;
}
else
{
for (i = s->size; i > 0; i--)
{
s->arrary[i] = s->arrary[i - 1];
}
s -> arrary[0] = x;
s->size++;
}
}
void popfront(SepList* s)
{
size_t i = 0;
if (s->size == 0)
{
return;
}
else if (s->size == 1)
{
s->size = 0;
}
else
{
for (i = 0; i < (s->size - 1); i++)
{
s->arrary[i] = s->arrary[i + 1];
}
s->arrary[s->size - 1] = 0;
s->size--;
}
}
void pushback(SepList* s, DataType x)
{
assert(s);
if (s->size == N)
{
printf("通讯录已满\n");
return;
}
else if (s->size == 1)
{
s->size = 0;
}
else
{
s->arrary[s->size] = x;
s->size++;
}
}
void popback(SepList* s)
{
assert(s);
if (s->size == 0)
{
return;
}
else
{
s->arrary[s->size - 1] = 0;
s->size--;
}
}
void insert(SepList* s,size_t pos, DataType x)
{
assert(s);
assert(pos <= s->size);
size_t i = 0;
for (i = s->size; i > pos-1; i--)
{
s->arrary[i] = s->arrary[i - 1];
}
s->arrary[pos - 1] = x;
s->size++;
}
void erase(SepList* s, size_t pos)
{
size_t i = 0;
assert(s);
assert(pos <= s->size);
if (pos == s->size)
{
s->arrary[pos - 1] = 0;
s->size--;
}
else
{
for (i = pos - 1; i < s->size - 1; i++)
{
s->arrary[i] = s->arrary[i + 1];
}
s->size--;
}
}
int Find(SepList* s, DataType x)
{
size_t i = 0;
for (i = 0; i < s->size; i++)
{
if (s->arrary[i] == x)
{
break;
}
}
if (i >= s->size)
{
printf("没找到\n");
return -1;
}
else
{
printf("找到了,下表是:%d ", &i);
return i;
}
}
void Remove(SepList* s, DataType x)
{
int i = Find(s, x);
if (i == 0)
{
popfront(s);
}
else if (i== (DataType)(s->size - 1))
{
popback(s);
}
else
{
erase(s, i+1);
}
}
void RemoveAll(SepList* s, DataType x)
{
while (Find(s, x) != -1)
{
int i = Find(s, x);
if (i == 0)
{
popfront(s);
}
else if (i == (DataType)(s->size - 1))
{
popback(s);
}
else
{
erase(s, i + 1);
}
}
}
void BubbleSort(SepList* s)
{
size_t i = 0;
size_t j = 0;
for (i = 0; i < s->size - 1; i++)
{
for (j = i; j < s->size; j++)
{
if (s->arrary[i]>s->arrary[j])
{
int tmp = s->arrary[i];
s->arrary[i] = s->arrary[j];
s->arrary[j] = tmp;
}
}
}
}
void SelectSort(SepList* s)
{
size_t i = 0;
size_t j = 0;
int tmp = 0;
for (i = 0; i < s->size - 1; i++)
{
int min = i;
for (j = i + 1; j < s->size; j++)
{
if (s->arrary[min]>s->arrary[j])
{
min = j;
}
}
tmp = s->arrary[min];
s->arrary[min] = s->arrary[i];
s->arrary[i] = tmp;
}
}
int BinarySearch(SepList* s, DataType x)
{
int left = 0;
int right = s->size - 1;
while (left<=right)
{
int mid = left + (right - left) / 2;
if (x > s->arrary[mid])
{
left = mid + 1;
}
else if (x < s->arrary[mid])
{
right = mid - 1;
}
else
{
printf("找到了,下表是:%d \n", mid);
return mid;
}
}
if (left>right)
{
printf("没找到.\n");
return -1;
}
}
void printSepList(SepList* s)
{
size_t i = 0;
printf("\n");
printf("\n");
printf("\n");
for (i = 0; i < (s->size); i++)
{
printf("%d ", s->arrary[i]);
}
printf("\n");
printf("\n");
printf("\n");
}
test.c文件
#include "test.h"
void list(void)
{
printf("** 1:头插 2:头删 **\n");
printf("** 3:尾插 4:尾删 **\n");
printf("** 5:插入 6:删除 **\n");
printf("** 7:查找 8:删除指定数字 **\n");
printf("** 9:删除指定的全部数字 10:冒泡排序 **\n");
printf("** 11:选择排序 12:二分查找寻找指定数字的下标 **\n");
printf("** 13:打印数组 0:退出 **\n");
}
int main()
{
SepList s;
init_SepList(&s);
while (1)
{
list();
int input = 0;
printf("请选择:");
scanf("%d", &input);
switch (input)
{
int x = 0;
case 1:
printf("请输入需要插入的数字:");
scanf("%d", &x);
pushfront(&s, x);
break;
case 2:
popfront(&s);
break;
case 3:
printf("请输入需要插入的数字:");
scanf("%d", &x);
pushback(&s, x);
break;
case 4:
popback(&s);
break;
case 5:
printf("请输入需要插入的数字:");
scanf("%d", &x);
size_t pos = 0;
printf("请输入需要插入的位置:");
scanf("%d", &pos);
insert(&s, pos, x);
break;
case 6:
printf("请输入需要插入的位置:");
scanf("%d", &pos);
erase(&s,pos);
break;
case 7:
printf("请输入需要插入的数字:");
scanf("%d", &x);
Find(&s,x);
break;
case 8:
printf("请输入需要删除的数字:");
scanf("%d", &x);
Remove(&s, x);
break;
case 9:
printf("请输入需要删除的数字:");
scanf("%d", &x);
RemoveAll(&s, x);
break;
case 10:
BubbleSort(&s);
break;
case 11:
SelectSort(&s);
break;
case 12:
printf("请输入需要寻找的数字:");
scanf("%d", &x);
BinarySearch(&s, x);
break;
case 13:
printSepList(&s);
break;
case 0:
return;
}
}
system("pause");
return 0;
}