#include "StdAfx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
struct List
{
int Max;
int n;
DataType *elem;
};
typedef struct List *SeqList;
SeqList SetNullList_Seq(int m)
{
SeqList slist = (SeqList)malloc(sizeof(struct List));
if (slist != NULL)
{
slist->elem = (DataType*)malloc(sizeof(DataType) * m);
if (slist->elem)
{
slist->Max = m;
slist->n = 0;
return(slist);
}
else free(slist);
}
printf("out of space!!\n");
return NULL;
}
int IsNullList_seq(SeqList slist)
{
return(slist->n == 0);
}
int InsertPre_seq(SeqList slist, int p, DataType x)
{
int q;
if (slist->n >= slist->Max)
{
printf("overflow");return(0);
}
if (p<0 || p>slist->n)
{
printf("not exist!\n"); return(0);
}
for (q = slist->n - 1; q >= p; q--)
slist->elem[q + 1] = slist->elem[q];
slist->elem[p] = x;
slist->n = slist->n + 1;
return(1);
}
int DelIndex_seq(SeqList slist, int p)
{
int q;
if (p < 0 || p >= slist->n)
{
printf("Not exist\n");
return 0;
}
for (q = p; q < slist->n - 1; q++)
{
slist->elem[q] = slist->elem[q + 1];
}
slist->n = slist->n - 1;
return 1;
}
int LocateIndex_seq(SeqList slist, int x)
{
int q;
for (q = 0;q < slist->n;q++)
{
if (slist->elem[q] == x)
return q;
}
return -1;
}
int binsearch(SeqList slist, int key, int* pos)
{
int index = 1;
int mid;
int low = 0;
int high = slist->n - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (slist->elem[mid] == key)
{
*pos = mid;
printf("找到,共进行%d次比较\n", index);
printf("要找的数据%d在位置%d上\n", key, mid);
return 1;
}
else if (slist->elem[mid] > key)
high = mid - 1;
else low = mid + 1;
index++;
}
*pos = low;
printf("没有找到,共进行%d次比较\n", index - 1);
printf("可将此数插入到位置%d上\n", *pos);
return -1;
}
void printList(SeqList slist)
{
printf("\n");
if (IsNullList_seq(slist))
printf("\n The list is NULL ! \n");
else
{
for (int i = 0;i < slist->n;i++)
printf("%d ",slist->elem[i]);
}
printf("\n");
}
int main()
{
int m = 10;
SeqList list1 = SetNullList_Seq(m);
for (int i = 0;i < m - 1;i++)
{
list1->elem[i] = i;
}
list1->n = m - 1;
printList(list1);
InsertPre_seq(list1, 1, 9);
printList(list1);
DelIndex_seq(list1, 1);
printList(list1);
printf("The location of %d is %d\n", 2, LocateIndex_seq(list1,2));
int pos = 0;
binsearch(list1, 5, &pos);
system("pause");
}