SeqList.h
#ifndef _SEQLIST_H__
#define _SEQLIST_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define MAX 1000
#define TYPES "%d"
typedef int DataType;
typedef struct Seqlist
{
DataType List[MAX];
int sz;
}Seqlist, *pSeqlist;
void InitSeqlist(pSeqlist p);
void PushBack(pSeqlist p, DataType d);
void PrintSeqlist(pSeqlist p);
void PopBack(pSeqlist p);
void PushFront(pSeqlist p,DataType d);
void PopFront(pSeqlist p);
void Insert(pSeqlist p, int pos,DataType d);
int Find(pSeqlist p, DataType d);
void Remove(pSeqlist p, DataType d);
void ReverseSeqlist(pSeqlist p);
void SortSeqlist(pSeqlist p);
int BinarySearch(pSeqlist p, DataType d);
#endif //_SEQLIST_H__
SeqList.c
#include "SeqList.h"
void InitSeqlist(pSeqlist p)
{
assert(p);
memset(p, 0, sizeof(Seqlist));
p->sz=0;
}
void PushBack(pSeqlist p, DataType d)
{
assert(p);
if(p->sz==MAX)
{
printf("列表以满\n");
return;
}
else
{
p->List[p->sz]=d;
p->sz++;
}
}
void PrintSeqlist(pSeqlist p)
{
int i=0;
assert(p);
if(p->sz==0)
{
printf("列表为空\n");
return ;
}
for (i=0; i<p->sz; i++)
{
printf(TYPES,p->List[i]);
}
printf("\n");
}
void PopBack(pSeqlist p)
{
assert(p);
p->sz--;
}
void PushFront(pSeqlist p,DataType d)
{
int i=0;
assert(p);
for (i=p->sz; i>0; i--)
{
p->List[i]=p->List[i-1];
}
p->List[0]=d;
p->sz++;
}
void PopFront(pSeqlist p)
{
int i=0;
assert(p);
for(i=0; i<p->sz-1; i++)
{
p->List[i]=p->List[i+1];
}
p->sz--;
}
void Insert(pSeqlist p, int pos,DataType d)
{
int i = 0;
assert(p);
for (i=p->sz; i>pos; i--)
{
p->List[i]=p->List[i-1];
}
p->List[pos]=d;
p->sz++;
}
int Find(pSeqlist p, DataType d)
{
int i = 0;
assert(p);
for (i=0; i<p->sz; i++)
{
if(p->List[i]==d)
{
return i;
}
}
if(i==p->sz)
{
printf("没找着\n");
}
return -1;
}
void Remove(pSeqlist p, DataType d)
{
int ret=Find(p, d);
assert(p);
if(ret==-1)
{
printf("没有此元素\n");
}
else
{
int i = 0;
for(i=ret; i<p->sz-1; i++)
{
p->List[i]=p->List[i+1];
}
p->sz--;
}
}
void ReverseSeqlist(pSeqlist p)
{
int left=0;
int right=p->sz-1;
assert(p);
while (left<right)
{
DataType tmp = p->List[left];
p->List[left] = p->List[right];
p->List[right] = tmp;
left++;
right--;
}
}
void SortSeqlist(pSeqlist p)
{
int i=0;
assert(p);
for (i=0; i<p->sz-1; i++)
{
int j=0;
for (j=0; j<p->sz-i-1; j++)
{
if(p->List[j]>p->List[j+1])
{
DataType tmp = p->List[j];
p->List[j] = p->List[j+1];
p->List[j+1] = tmp;
}
}
}
}
int BinarySearch(pSeqlist p, DataType d)
{
int left=0;
int right=p->sz-1;
assert(p);
while (left<=right)
{
int mid = left+(right-left)/2;
if(p->List[mid]>d)
{
right=mid;
}
else if(p->List[mid]<d)
{
left=mid;
}
else
{
return mid;
}
}
return -1;
}
test.c
#include "SeqList.h"
void test1()
{
Seqlist seqlist;
int ret = 0;
InitSeqlist(&seqlist);
PushBack(&seqlist, 1);
PushBack(&seqlist, 2);
PushBack(&seqlist, 3);
PushBack(&seqlist, 4);
printf("尾插1、2、3、4:");
PrintSeqlist(&seqlist);
PopBack(&seqlist);
printf("尾删:");
PrintSeqlist(&seqlist);
PushFront(&seqlist, 0);
printf("头插0:");
PrintSeqlist(&seqlist);
PopFront(&seqlist);
printf("头删:");
PrintSeqlist(&seqlist);
Insert(&seqlist, 1, 5);
printf("在1位置插入5:");
PrintSeqlist(&seqlist);
ret = Find(&seqlist, 5);
printf("ret = %d\n", ret);
Remove(&seqlist, 5);
printf("删除5这个元素:");
PrintSeqlist(&seqlist);
}
void test2()
{
Seqlist seqlist;
int ret = 0;
InitSeqlist(&seqlist);
PushBack(&seqlist, 1);
PushBack(&seqlist, 2);
PushBack(&seqlist, 3);
PushBack(&seqlist, 4);
PrintSeqlist(&seqlist);
ReverseSeqlist(&seqlist);
printf("逆序:");
PrintSeqlist(&seqlist);
SortSeqlist(&seqlist);
printf("排序:");
PrintSeqlist(&seqlist);
ret = BinarySearch(&seqlist, 2);
printf("二分查找元素2:");
printf("ret = %d\n", ret);
}
int main()
{
test2();
return 0;
}
运行结果
test1

test2
