顺序表是线性表的一种,除了顺序表线性表还包括链表,今天先讨论顺序表,其中顺序表包括静态的和动态的,现在可以将顺序表的各个接口分别实现

#include"Sql_s.h"

#include<stdio.h>

void test1()//初始化

{

SqlList mylist;

Init(&mylist);

}

void test2()//打印

{

SqlList mylist;

PrintList(&mylist);

}

void test3()//尾插

{

SqlList mylist;

Init(&mylist);

PushBack(&mylist,1);

PushBack(&mylist, 3);

PushBack(&mylist, 4);

PushBack(&mylist, 5);

PrintList(&mylist);

}

void test4()//头插

{

SqlList mylist;

Init(&mylist);

PushBack(&mylist, 1);

PushBack(&mylist, 3);

PushBack(&mylist, 4);

PushFront(&mylist,2);

PrintList(&mylist);

}

void test5()//尾删

{

SqlList mylist;

Init(&mylist);

PushBack(&mylist, 1);

PushBack(&mylist, 3);

PushBack(&mylist, 4);

PopBack(&mylist);

PrintList(&mylist);

}

void test6()//头删

{

SqlList mylist;

Init(&mylist);

PushBack(&mylist, 1);

PushBack(&mylist, 3);

PushBack(&mylist, 4);

PopFront(&mylist);

PrintList(&mylist);

}

void test7()//插入

{

SqlList mylist;

Init(&mylist);

PushBack(&mylist, 1);

PushBack(&mylist, 3);

PushBack(&mylist, 4);

InsertList(&mylist, 1, 2);

PrintList(&mylist);

}

void test8()//删除

{

SqlList mylist;

Init(&mylist);

PushBack(&mylist, 1);

PushBack(&mylist, 3);

PushBack(&mylist, 4);

RemoveList(&mylist, 3);

PrintList(&mylist);

}

void test9()//全部删除

{

SqlList mylist;

Init(&mylist);

PushBack(&mylist, 4);

PushBack(&mylist, 1);

PushBack(&mylist, 3);

PushBack(&mylist, 4);

RemoveListAll(&mylist, 4);

PrintList(&mylist);


}

void test10()//排序

{

SqlList mylist;

Init(&mylist);

PushBack(&mylist, 4);

PushBack(&mylist, 1);

PushBack(&mylist, 3);

PushBack(&mylist, 2);

SortList(&mylist);

PrintList(&mylist);


}

void test11()//二分查找

{

DataType ret;

SqlList mylist;

Init(&mylist);

PushBack(&mylist, 4);

PushBack(&mylist, 1);

PushBack(&mylist, 3);

PushBack(&mylist, 2);

SortList(&mylist);

ret=BinarySearch(&mylist,3);

printf("%d\n",ret);

}

int main()

{

test11();

system("pause");

return 0;

}




#ifndef __SQL_S_H__

#include<stdio.h>

#define MAX 20

typedef int DataType;

typedef struct SqlList

{

DataType arr[MAX];

int size;

}SqlList;

void Init(SqlList *pmylist);

void PrintList(SqlList mylist);

void PushBack(SqlList *pmylist,int x);

void PushFront(SqlList *pmylist, int x);

void PopBack(SqlList *pmylist);

void PopFront(SqlList *pmylist);

void InsertList(SqlList *pmylist,int pos,DataType x);

void RemoveList(SqlList *pmylist, DataType x);

int  FindList(SqlList *pmylist,DataType x);

void RemoveListAll(SqlList *pmylist, DataType x);

void SortList(SqlList *pmylist);

int BinarySearch(SqlList *pmylist,DataType x);

void Init(SqlList *pmylist)//初始化

{

memset(pmylist->arr, 0, sizeof(pmylist->size));

pmylist->size = 0;

}

void PrintList(SqlList *pmylist)//打印

{

int i = 0;

for (i = 0; i < pmylist->size; i++)

{

printf("%d ",pmylist->arr[i]);

}

printf("\n");

printf("over\n");

}


void PushBack(SqlList *pmylist, DataType x)//尾插

{

if (pmylist->size == MAX)

{

printf("顺序表已满\n");

return;

}

else

{

pmylist->size++;

pmylist->arr[pmylist->size - 1] = x;

}

}

void PushFront(SqlList *pmylist, DataType x)//头插

{

if (pmylist->size ==MAX)

{

printf("顺序表已满\n");

return;

}

else

{

int i = pmylist->size;

for (; i > 0; i--)

{

pmylist->arr[i] = pmylist->arr[i - 1];

}

pmylist->arr[0] = x;

pmylist->size++;

}

}

void PopBack(SqlList *pmylist)//尾删

{

pmylist->size--;

}

void PopFront(SqlList *pmylist)//头删

{

int i = 0;

for (; i < pmylist->size - 1; i++)

{

pmylist->arr[i] = pmylist->arr[i + 1];

}

pmylist->size--;

}

void InsertList(SqlList *pmylist,int pos,DataType x)//插入

{

if (pmylist->size == MAX)

{

printf("顺序表已满\n");

return;

}

else

{

int i = pmylist->size;

for (; i>pos; i--)

{

pmylist->arr[i] = pmylist->arr[i-1];

}

pmylist->arr[pos] = x;

pmylist->size++;

}

}

int FindList(SqlList *pmylist,DataType x)//查找

{

int i=0;

for (; i < pmylist->size; i++)

{

if (pmylist->arr[i] == x)

return i;

}

return -1;

}

void RemoveList(SqlList *pmylist, DataType x)//删除

{

int ret;

ret = FindList(pmylist,x);

if (ret == -1)

{

printf("顺序表中没有此元素\n");

return;

}

else

{

int i = ret;

for (; i < pmylist->size-1; i++)

{

pmylist->arr[i] = pmylist->arr[i + 1];

}

pmylist->size--;

}

}

void RemoveListAll(SqlList *pmylist, DataType x)//全部删除

{

int ret;

int i = 0;

while (i<pmylist->size-1)

{

ret = FindList(pmylist, x);

if (ret != -1)

{

RemoveList(pmylist, x);

}

i++;

}

}

void SortList(SqlList *pmylist)//排序

{

int i = 0;

int j = 0;

DataType tmp;

for (i = 0; i < pmylist->size - 1; i++)

{

for (j = 0; j < pmylist->size - i - 1; j++)

{

if (pmylist->arr[j]>pmylist->arr[j + 1])

{

tmp = pmylist->arr[j];

pmylist->arr[j] = pmylist->arr[j + 1];

pmylist->arr[j + 1] = tmp;

}


}

}

}

int BinarySearch(SqlList *pmylist, DataType x)//二分查找

{

int mid;

int left = 0;

int right = pmylist->size - 1;

while (left < right)

{

mid = (left + right) / 2;

if (pmylist->arr[mid]>x)

{

right = mid - 1;

}

else if (pmylist->arr[mid] == x)

{

return mid;

}

else

{

left = mid + 1;

}

}

}


#endif __SQL_S_H__