seqlist.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include<stdio.h>
#include<assert.h>
#include<string.h>
#define MAX 10
typedef int DataType;
typedef struct SeqList
{
DataType data[MAX];
int sz;
}SeqList, *pSeqList;
void InitSeqList(pSeqList ps);//初始化
void PushBack(pSeqList ps, DataType d);//尾插
void PopBack(pSeqList ps); // 尾删
void Display(const pSeqList ps);//显示
void PushFront(pSeqList ps, DataType d);//头插
void PopFront(pSeqList ps);//头删
int Find(pSeqList ps, DataType d);//查找元素
void Insert(pSeqList ps, DataType d, int pos);//在给定位置插入元素
void Remove(pSeqList ps, DataType d);//删除指定的元素
void RemoveAll(pSeqList ps, DataType d);//删除你要删除的的出现的所有元素
void Reverse(pSeqList ps);//逆序顺序表
void Sort(pSeqList ps);//冒泡排序
int BinarySearch(pSeqList ps, DataType d);//二分查找
#endif //__SEQLIST_H__
seqlist.c
#include"seqlist.h"
void InitSeqList(pSeqList ps)
{
assert(ps);
ps->sz = 0;
memset(ps->data, 0, sizeof(DataType)*(ps->sz));
}
void PushBack(pSeqList ps, DataType d)
{
assert(ps);
if (ps->sz < MAX)
{
ps->data[ps->sz] = d;
ps->sz++;
}
else
{
return;
}
}
void PopBack(pSeqList ps)
{
assert(ps);
if (ps->sz == 0)
{
return;
}
else
{
ps->sz--;
}
}
void Display(const pSeqList ps)
{
int i = 0;
for (i = 0; i < ps->sz; i++)
{
printf("%d", ps->data[i]);
}
printf("\n");
}
void PushFront(pSeqList ps, DataType d)
{
assert(ps);
int i = 0;
for (i = ps->sz; i >0; i--)
{
ps->data[i] = ps->data[i - 1];
}
ps->data[0] = d;
ps->sz++;
}
void PopFront(pSeqList ps)
{
assert(ps);
int i = 0;
if (ps->sz == 0)
{
return;
}
else
{
for (i = 0; i < ps->sz; i++)
{
ps->data[i] = ps->data[i + 1];
}
ps->sz--;
}
}
int Find(pSeqList ps, DataType d)
{
assert(ps);
int i = 0;
for (i = 0; i < ps->sz; i++)
{
if (ps->data[i] == d)
{
return i;
}
}
return -1;
}
void Insert(pSeqList ps, DataType d, int pos)
{
assert(ps);
int i = 0;
if (ps->sz == MAX)
{
return;
}
else
{
memmove(ps->data + pos + 1, ps->data + pos, sizeof(DataType)*(ps->sz - pos));
ps->data[pos] = d;
ps->sz++;
}
}
void Remove(pSeqList ps, DataType d)
{
assert(ps);
int i = 0;
for (i = 0; i < ps->sz; i++)
{
if (ps->data[i] == d)
{
for (; i < ps->sz; i++)
{
ps->data[i] = ps->data[i + 1];
}
ps->sz--;
break;
}
}
}
void RemoveAll(pSeqList ps, DataType d)
{
assert(ps);
int i = 0;
for (i = 0; i < ps->sz; i++)
{
if (ps->data[i] == d)
{
for (; i < ps->sz; i++)
{
ps->data[i] = ps->data[i + 1];
}
ps->sz--;
i = 0;
}
}
}
void Reverse(pSeqList ps)
{
assert(ps);
DataType tmp = 0;
int left = 0;
int right = ps->sz - 1;
while (left < right)
{
tmp = ps->data[left];
ps->data[left] = ps->data[right];
ps->data[right] =tmp;
left++;
right--;
}
}
void Sort(pSeqList ps)
{
DataType tmp = 0;
int i = 0;
int j = 0;
for (i = 0; i < ps->sz - 1; i++)
{
for (j = 0; j < ps->sz - i - 1; j++)
{
if (ps->data[j]>ps->data[j + 1])
{
DataType tmp = ps->data[j];
ps->data[j] = ps->data[j + 1];
ps->data[j + 1] = tmp;
}
}
}
}
int BinarySearch(pSeqList ps, DataType d)
{
int left = 0;
int right = ps->sz - 1;
while (left < right)
{
int mid = left + (right - left) / 2;
if (ps->data[mid] < d)
{
left=mid;
}
else if (ps->data[mid]>d)
{
right=mid;
}
else
return mid;
}
return -1;
}
test.c
#include"seqlist.h"
void test()
{
SeqList my_list;//创建结构提变量
InitSeqList(&my_list);//初始化函数
//PushBack(&my_list, 1);//插尾函数
//Display(&my_list);
//PushBack(&my_list, 2);//插尾函数
//Display(&my_list);
//PushBack(&my_list, 3);//插尾函数
//Display(&my_list);
//PushBack(&my_list, 4);//插尾函数
//Display(&my_list);//打印数序表
//PopBack(&my_list);//删除尾部元素的信息
//Display(&my_list);
//PopBack(&my_list);
//Display(&my_list);
//PopBack(&my_list);
//Display(&my_list);
//PopBack(&my_list);
//Display(&my_list);//打印数序表
PushFront(&my_list, 1);//从头部插入
Display(&my_list);
PushFront(&my_list, 2);
Display(&my_list);
PushFront(&my_list, 3);
Display(&my_list);
PushFront(&my_list, 2);
Display(&my_list);
PushFront(&my_list, 4);
Display(&my_list);
//PopFront(&my_list);
//Display(&my_list);
//PopFront(&my_list);
//Display(&my_list);
//PopFront(&my_list);
//Display(&my_list);
//PopFront(&my_list);
//Display(&my_list);
//int ret=Find(&my_list, 3);
//printf("%d", ret);
Insert(&my_list, 8, 3);//指定位置插入元素
Display(&my_list);
//Remove(&my_list, 2);//删除所有你想删除的元素出现的第一个
//Display(&my_list);
//RemoveAll(&my_list, 2);//删除顺序表中出现的所有你要删除的元素
//Display(&my_list);
//Reverse(&my_list);//逆序的测试
//Display(&my_list);
//Sort(&my_list);//排序的测试
//Display(&my_list);
//int ret = BinarySearch(&my_list, 2);//二分查找的测试
//printf("%d", ret);
}
int main()
{
test();
system("pause");
return 0;
}