文件一common.h
#ifndef COMMON_H
#define COMMOM_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#include<assert.h>
//#include<vld.h>//检测内存泄漏的头文件
#define DataType int
#define CAPACITY 8
typedef struct SeqList
{
DataType* Base;//指向表头的指针
size_t size;//顺序表当前存储的个数
size_t capacity;//顺序表容量
}SeqList;
bool SeqListIsFull(SeqList* psl);
void SeqListInit(SeqList* psl, DataType sz);
bool SeqListPushBack(SeqList* psl, DataType x);
void SeqList_show(SeqList* psl);
bool SeqListPushFront(SeqList* psl, DataType x);
size_t SeqListLength(SeqList* psl);
void SeqListclear(SeqList* psl);
bool SeqListIsempty(SeqList* psl);
void SeqListSort(SeqList* psl);
void SeqListReverse(SeqList* psl);
bool SeqListModiftByPos(SeqList* psl, int pos, DataType item);
void Destort_Seqlist(SeqList* psl);
void ModifyByValue(SeqList* psl,int val,int x);
int FindByPos(SeqList* psl, int pos, DataType* ret);
int FindByVal(SeqList* psl, int val, DataType* ret);
bool Pop_back(SeqList* psl);
bool Pop_Front(SeqList* psl);
bool SeqlistInc(SeqList* psl);
#endif
2.test.c
#include"common.h"
int main()
{
SeqList mylist;
SeqListInit(&mylist, CAPACITY);//初始化顺序表;
int select = 1;
int pos = 0;
DataType item = 0;
DataType ret = 0;
DataType flag = 0;
while (select)
{
printf("**************************************\n");
printf("****1.push_back 2.push_front******\n");
printf("****3.show_list 0.list_exit*******\n");
printf("****4.length 5.clear***********\n");
printf("****6.sort 7. reverse********\n");
printf("****8.Modify_pos 9.Modify_value****\n");
printf("****10.Find_pos 11.Find_value ****\n");
printf("****12.Pop_back 13.Pop_front ****\n");
printf("** 14.Destory_Seqlist **\n");
printf("请选择>");
scanf_s("%d",&select);
if (select == 0)
{
break;
}
switch (select)
{
case 1:
printf("请输入你要插入的数据,打印-1退出\n");
while (scanf_s("%d", &item), item != -1)
{
SeqListPushBack(&mylist, item);
}
break;
case 2:
printf("请输入你要插入的数据,打印-1退出\n");
while (scanf_s("%d", &item), item != -1)
{
SeqListPushFront(&mylist, item);
}
break;
case 3:
SeqList_show(&mylist);
break;
case 4:
printf("%d", SeqListLength(&mylist));
printf("\n");
break;
case 5:
SeqListclear(&mylist);
break;
case 6:
SeqListSort(&mylist);
break;
case 7:
SeqListReverse(&mylist);
break;
case 8:
printf("请输入你要插入的位置\n");
scanf_s("%d", &pos);
printf("请输入你要插入的数据\n");
scanf_s("%d", &item);
SeqListModiftByPos(&mylist, pos, item);
break;
case 9:
printf("请输入要被修改的数据>");
scanf_s("%d", &pos);
printf("请输入要改的数据>");
scanf_s("%d", &item);
ModifyByValue(&mylist, pos,item);
break;
case 10:
printf("请输入要查找的位置>");
scanf_s("%d", &item);
flag = FindByPos(&mylist,item,&ret);
printf("%d\n", flag);
case 11:
printf("请输入要查找的值>");
scanf_s("%d", &item);
flag = FindByVal(&mylist, item, &ret);
if (flag == -1)
{
printf("找不到\n");
}
else
printf("%d\n", flag);
break;
case 12:
Pop_back(&mylist);
break;
case 13:
Pop_Front(&mylist);
break;
case 14:
Destort_Seqlist(&mylist);
break;
default :
printf("输入错误,请重新输入>");
}
}
return 0;
}
3.seqlist.c
#include"common.h"
//函数的实现
void SeqListInit(SeqList* psl, DataType sz)
{
psl->capacity = sz > CAPACITY ? sz : CAPACITY;
psl->Base = (DataType*)malloc(sizeof(DataType)* (psl->capacity));
psl->size = 0;
}
bool SeqlistInc(SeqList* psl)
{
assert(psl != NULL);
psl->Base = realloc(psl->Base, sizeof(DataType)* 2);
if (psl->Base == NULL)
{
printf("内存开辟失败>");
psl->capacity += 2;
return true;
}
}
bool SeqListIsempty(SeqList* psl)
{
DataType i = 0;
for (i = 0; i < psl->size; i++)
{
if (psl->Base[i] != 0)
{
return false;
}
}
return true;
}
bool SeqListIsFull(SeqList* psl)
{
return psl->size >= psl->capacity;
}
bool SeqListPushBack(SeqList* psl, DataType x)
{
assert(psl!=NULL);
if (SeqListIsFull(psl))
{
printf("顺序表已满,%d不能插入\n", x);
}
psl->Base[psl->size] = x;
psl->size++;
return true;
}
void SeqList_show(SeqList* psl)
{
DataType i = 0;
for (i = 0; i < psl->size; i++)
{
printf("%d ", psl->Base[i]);
}
printf("\n");
}
bool SeqListPushFront(SeqList* psl, DataType x)
{
DataType i = 0;
assert(psl != NULL);
if (SeqListIsFull(psl))
{
printf("顺序表已满 x不能插入\n", x);
}
for (i = psl->size; i>0; i--)
{
psl->Base[i] = psl->Base[i-1];
}
psl->Base[i] = x;
psl->size++;
return true;
}
size_t SeqListLength(SeqList* psl)
{
assert(psl);
return psl->size;
}
void SeqListclear(SeqList* psl)
{
assert(psl);
if (SeqListIsempty(psl))
{
printf("顺序表为空");
}
else
{
psl->size = 0;
}
}
void SeqListSort(SeqList* psl)
{
DataType BegainNumber = 0;
DataType LastNumber = 0;
DataType tmp = 0;
for (BegainNumber = 0; BegainNumber < (psl->size)-1; BegainNumber++)
{
for (LastNumber = 0; LastNumber < (psl->size) - BegainNumber - 1; LastNumber++)
{
if (psl->Base[LastNumber]>psl->Base[LastNumber + 1])
{
tmp = psl->Base[LastNumber];
psl->Base[LastNumber] = psl->Base[LastNumber + 1];
psl->Base[LastNumber + 1] = tmp;
}
}
}
}
void SeqListReverse(SeqList* psl)
{
DataType i = 0;
DataType Left = 0;
DataType Right = (psl->size) - 1;
DataType tmp = 0;
while (Left < Right)
{
tmp = psl->Base[Left];
psl->Base[Left] = psl->Base[Right];
psl->Base[Right] = tmp;
Left++;
Right--;
}
}
bool SeqListModiftByPos(SeqList* psl, int pos, DataType item)
{
assert(psl != NULL);
if (SeqListIsempty(psl))
{
return false;
}
if (pos<0 || pos>psl->size - 1)
{
printf("输入的位置不合法\n");
return false;
}
psl->Base[pos] = item;
return true;
}
void ModifyByValue(SeqList* psl,int val,int x)
{
DataType i = 0;
while (psl != NULL&& psl->Base[i] != val)
{
i++;
}
psl->Base[i] = x;
}
int FindByPos(SeqList* psl, int pos,DataType* ret)
{
if (pos<0 || pos>psl->size)
{
printf("输入的位置不合法>");
return 0;
}
*ret = psl->Base[pos];
return *ret;
}
int FindByVal(SeqList* psl, int val, DataType* ret)
{
DataType i = 0;
while (psl != NULL && psl->Base[i] != val&&i<psl->size)
{
i++;
}
if (i < psl->size)
{
*ret = psl->Base[i];
return *ret;
}
return -1;
}
bool Pop_back(SeqList* psl)
{
DataType i = 0;
if (psl->size == 0)
{
printf("顺序表为空,不能删除>");
return false;
psl->size--;
return true;
}
bool Pop_Front(SeqList* psl)
{
int i = 0;
if (SeqListIsempty(psl))
{
printf("顺序表为空,不能头删>");
return false;
}
for (i = 0; i <psl->size-1; i++)
psl->Base[i] = psl->Base[i + 1];
psl->size--;
return true;
}
void Destort_Seqlist(SeqList* psl)
{
free(psl->Base);
psl->Base = NULL;
psl->capacity = psl->size = 0;
}
}