用c语言实现顺序表
#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqList.h"
int InitSeqlist(pSeqlist plist)
{
assert(plist);
memset(plist->data, 0, MAX_SIZE*sizeof(DataType));
plist->sz = 0;
}
//尾部插入
void PushBack(pSeqlist plist, DataType d)
{
assert(plist);
if (plist->sz >= MAX_SIZE)
{
printf("顺序表满了\n");
return;
}
plist->data[plist->sz] = d;
plist->sz++;
}
//尾部删除
void PopBack(pSeqlist plist)
{
assert(plist);
if (plist->sz == 0)
{
printf("顺序表为空\n");
return;
}
plist->sz--;
}
//头部插入
void PushFront(pSeqlist plist, DataType d)
{
int i = 0;
assert(plist);
if (plist->sz >= MAX_SIZE)
{
printf("顺序表满了\n");
return;
}
for (i = plist->sz; i>0; i--)
{
plist->data[i] = plist->data[i - 1];
}
plist->data[0] = d;
plist->sz++;
}
//头部删除
void PopFront(pSeqlist plist)
{
int i = 0;
assert(plist);
if (plist->sz == 0)
{
printf("顺序表为空\n");
return;
}
for (i = 0; i < plist->sz-1; i++)
{
plist->data[i] = plist->data[i + 1];
}
plist->sz--;
}
//插入数据
void Insert(pSeqlist plist, int pos, DataType d)
{
int i = 0;
assert(plist && (pos >= 0) && (pos <= plist->sz));
if (plist->sz >= MAX_SIZE)
{
printf("顺序表满了\n");
return;
}
for (i = plist->sz; i > pos; i--)
{
plist->data[i] = plist->data[i - 1];
}
plist->data[pos] = d;
plist->sz++;
}
//查找
int Find(pSeqlist plist, DataType d)
{
int i = 0;
assert(plist);
if (plist->sz == 0)
{
printf("顺序表为空\n");
return -1;
}
for (i = 0; i < plist->sz; i++)
{
if (plist->data[i] == d)
return i;
}
if (i == plist->sz)
{
printf("Not find\n");
return -1;
}
}
//删除指定元素
void Remove(pSeqlist plist, DataType d)
{
int i = 0;
int pos = Find(&plist, d);
assert(plist);
if (plist->sz == 0)
{
printf("顺序表为空\n");
return;
}
for (i = pos; i < plist->sz; i++)
{
plist->data[i] = plist->data[i + 1];
}
plist->sz--;
}
void RemoveAll(pSeqlist plist, DataType d)
{
int i = 0;
int pos= 0;
assert(plist);
if (plist->sz == 0)
{
printf("顺序表为空\n");
return;
}
while (pos=Find(&plist, d) != d)
{
for (i = pos; i < plist->sz; i++)
{
plist->data[i] = plist->data[i + 1];
}
plist->sz--;
}
}
void PrintSeqlist(pSeqlist plist)
{
int i = 0;
assert(plist);
for (i = 0; i < plist->sz; ++i)
{
printf("%d ", plist->data[i]);
}
printf("\n");
}
void BubbleSort(pSeqlist plist)
{
int i = 0;
for (i = 0; i <= plist->sz - 1; i++)
{
int j = 0;
for (j = 0; j <= plist->sz - i - 1; i++)
{
if (plist->data[j] < plist->data[j + 1])
{
int tmp = plist->data[j];
plist->data[j] = plist->data[j + 1];
plist->data[j + 1] = tmp;
}
}
}
}
int BinarySearch(pSeqlist plist, DataType d)
{
int left = 0;
int right = plist->sz - 1;
while (left <= right)
{
int mid = left - ((left - right) >> 1);
if (plist->data[mid] > d)
{
right = mid - 1;
}
else if (plist->data[mid] < d)
{
left = mid + 1;
}
else
{
return mid;
}
return -1;
}
}
void ReverseSeqlist(pSeqlist plist)
{
int left = 0;
int right = plist->sz - 1;
int tmp = 0;
while (left < right)
{
tmp = plist->data[left];
plist->data[left] = plist->data[right];
plist->data[right] = tmp;
left++;
right--;
}
}
void DestroySeqlist(pSeqlist plist)
{
plist->data = 0;
}