时间复杂度
#pragma once
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef int DataType;
typedef struct SeqList
{
DataType _array[MAX_SIZE];
int _size;
}Sql,*ps;
void SqlInitList(ps p);
void printSqlList(ps p);
void SqlListpushback(ps p,DataType date);
void SqlListpopback(ps p);
void SqlListpushfront(ps p,DataType data);
void SqlListpopfront(ps p);
void SqlListinsert(ps p,DataType data, DataType place);
void SeqListerase(ps p,DataType place);
void SeqListReMove(ps p,int data);
void SeqListRemoveAll(ps p,int data);
void BubbleSort(ps p);
void SelectSort(ps p);
int BinarySearch(ps p,int data);
#define _CRT_SECURE_NO_WARNINGS 1
#include "test.h"
int FindNum(ps p, DataType data)
{
int i = 0;
if(NULL == p)
{
exit(EXIT_FAILURE);
}
for(i=0; i<p->_size; i++)
{
if(p->_array[i] == data)
return i;
}
return -1;
}
void SqlInitList(ps p)
{
if(NULL == p)
{
return ;
}
p->_size = 0;
}
void SqlListpushback(ps p,DataType date)
{
if(NULL == p)
{
return;
}
if(MAX_SIZE == p->_size)
{
printf("顺序表已满!!!\n");
return;
}
#if 0
p->_array[p->_size] = date;
++p->_size;
#endif
SqlListinsert(p,date,p->_size);
}
void SqlListpopback(ps p)
{
if(NULL == p)
{
return;
}
if(0 == p->_size)
{
printf("顺序表以为空!!!\n");
}
#if 0
--p->_size;
#endif
SeqListerase(p,p->_size-1);
}
void printSqlList(ps p)
{
int i = 0;
if(NULL == p)
{
return ;
}
for(i=0; i<p->_size; ++i)
{
printf("%d ",p->_array[i]);
}
printf("\n");
}
void SqlListpushfront(ps p,DataType data)
{
int i = 0;
if(NULL == p)
{
return ;
}
if(MAX_SIZE == p->_size)
{
printf("顺序表已满!!!\n");
return ;
}
#if 0
for(i=p->_size; i>0; --i)
{
p->_array[i] = p->_array[i-1];
}
p->_array[0] = data;
++p->_size;
#endif
SqlListinsert(p,data,0);
}
void SqlListpopfront(ps p)
{
int i = 0;
if(NULL == p)
{
return;
}
#if 0
for(i=0; i<p->_size-1; i++)
{
p->_array[i] = p->_array[i+1];
}
--p->_size;
#endif
SeqListerase(p,0);
}
void SqlListinsert(ps p,DataType data, DataType place)
{
int i = 0;
if((NULL == p)||(place<0 || place >p->_size))
{
printf("数据越界或地址为空!!!\n");
return;
}
if(MAX_SIZE == p->_size)
{
printf("顺序表已满!!!\n");
return;
}
for(i=p->_size; i>place; --i)
{
p->_array[i] = p->_array[i-1];
}
p->_array[place] = data;
++p->_size;
}
void SeqListerase(ps p,DataType place)
{
int i = 0;
if(NULL == p)
{
return ;
}
for(i=place; i<p->_size-1; ++i)
{
p->_array[i] = p->_array[i+1];
}
--p->_size;
}
void SeqListReMove(ps p,int data)
{
int i = 0;
int ret = FindNum(p,data);
if(NULL == p)
{
return ;
}
if(ret == -1)
{
printf("未找到数据!!!\n");
return ;
}
SeqListerase(p,ret);
}
void SeqListRemoveAll(ps p,int data)
{
int count = 0;
int ret = FindNum(p,data) ;
int i = ret;
if(NULL == p)
{
return;
}
if(ret == -1)
{
printf("未找到数据\n");
return ;
}
for(i=0; i<p->_size; ++i)
{
if(data == p->_array[i])
count++;
else
p->_array[i-count] = p->_array[i];
}
p->_size-=count;
}
void Swap(int *p, int *q)
{
int ret = 0;
if(NULL == p || NULL == q)
{
return;
}
ret = *p;
*p = *q;
*q = ret;
}
void BubbleSort(ps p)
{
int i = 0;
int j = 0;
if(NULL == p)
{
return;
}
for(i=0; i<p->_size-1; i++)
{
int flag = 0;
for(j=0; j<p->_size-1-i; j++)
{
if(p->_array[j]>p->_array[j+1])
{
Swap(&(p->_array[j]) , &p->_array[j+1]);
flag = 1;
}
}
if(0 == flag)
return ;
}
}
void SelectSort(ps p)
{
int i = 0;
int j = 0;
if(NULL == p)
return;
for(i=0; i<p->_size-1; i++)
{
int max = 0;
for(j=1; j<p->_size-i; j++)
{
if(p->_array[max]<p->_array[j])
max = j;
}
Swap(&(p->_array[max]),&(p->_array[p->_size-1-i]));
}
}
int BinarySearch(ps p,int data)
{
int left = 0;
int right = p->_size-1;
int mid = 0;
while(left <= right)
{
mid = left +((right-left)>>1);
if(p->_array[mid] == data)
{
return mid;
}
else if(p->_array[mid] > data)
right = mid - 1;
else if(p->_array[mid] < data)
left = mid + 1;
}
return -1;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include "test.h"
int main()
{
Sql s;
SqlInitList(&s);
printf("从头部添加数据:");
SqlListpushback(&s,1);
SqlListpushback(&s,4);
SqlListpushback(&s,5);
SqlListpushback(&s,2);
SqlListpushback(&s,1);
SqlListpushback(&s,92);
SqlListpushback(&s,2);
printSqlList(&s);
SqlListpopback(&s);
printf("从尾部删除一个数据:");
printSqlList(&s);
SqlListpushfront(&s,8);
printf("从头部添加一个数据:");
printSqlList(&s);
SqlListpopfront(&s);
printf("从头部删除一个数据:");
printSqlList(&s);
SqlListinsert(&s,100,1);
printf("在数组下标为1处添加一个数据100:");
printSqlList(&s);
SeqListerase(&s,3);
printf("删除下标为3的数据:");
printSqlList(&s);
SeqListReMove(&s,4);
printf("删除为4的一个数据;");
printSqlList(&s);
SeqListRemoveAll(&s,2);
printf("删除为2的所有元素:");
printSqlList(&s);
SelectSort(&s);
printf("选择排序的结果:");
printSqlList(&s);
printf("%d\n",BinarySearch(&s,92));
return 0;
}