
#include "SeqList.h"
void InitSeqlist(pSeqList p) // 顺序表初始化
{
p->count = 0;
memset(p->arr,0,sizeof(DataType)*MAX);
}
void PushBack(pSeqList p,DataType d) //后插
{
assert(p);
if(MAX == p->count)
{
PRintf("满了\n");
return; //顺序表满了返回
}
p->arr[p->count] = d;
p->count++;
}
void Show(pSeqList p) //打印顺序表
{
int i = 0;
assert(p);
for(i = 0; i < p->count; i++) //遍历一遍
{
printf("%d ",p->arr[i]);
}
printf("\n");
}
void PopBack(pSeqList p) //后弹
{
assert(p);
if(p->count == 0)
{
return;
}
p->count--;
}
void PushFront(pSeqList p,DataType d) //头插
{
int i = p->count;
assert(p);
while(i) //所有值右移
{
p->arr[i] = p->arr[i-1]; //腾出第一位置
i--;
}
p->arr[0] = d; //插入
p->count++;
}
void PopFront(pSeqList p) //头弹
{
int i = 1;
assert(p);
while(i < p->count) //所有值左移
{
p->arr[i-1] = p->arr[i];
i++;
}
p->count--;
}
int Find(pSeqList p,DataType d) //查找节点
{
int i = 0;
assert(p);
while(i < p->count)
{
if(p->arr[i] == d)
return i;
else
i++;
}
return -1;
}
void Remove(pSeqList p,DataType d) //删除节点
{
int i = 0;
for(i=0; i < p->count; i++)
{
if(p->arr[i] == d)
{
for(; i < p->count; i++)
{
p->arr[i] = p->arr[i+1];
}
}
}
p->count--;
}
void Sort(pSeqList p) //冒泡排序
{
int i=1;
int j=0;
DataType temp=0;
for(i=1;i<p->count;i++)
for(j=0;j<p->count-i;j++)
if(p->arr[j]>p->arr[j+1])
{
temp = p->arr[j];
p->arr[j] = p->arr[j+1];
p->arr[j+1] = temp;
}
}
int BinarySearch(pSeqList p,DataType d) //二分查找
{
int left = 0;
int right = p->count;
while(left <= right)
{
int mid = left - ((left - right)>>1);
if(p->arr[mid] == d)
return mid;
else if(p->arr[mid] < d)
{
left = mid+1;
}
else
{
right = mid-1;
}
}
return -1;
}