首页 > 代码库 > 【算法和数据结构】_17_小算法_线性结构:顺序表

【算法和数据结构】_17_小算法_线性结构:顺序表

/*本程序用来测试数据结构中的线性结构:顺序表*/#include <stdio.h>#include <stdlib.h>#define LINEAR_MAX_SIZE 64struct LinearList{    int* List;  //顺序表指针    unsigned short int ListLen;  //顺序表最大的元素个数    unsigned short int CurrentLen;  //顺序表当前元素的个数};typedef  struct LinearList LINEARLIST;typedef  enum {FALSE,TRUE} BOOL;void  CreateLinearList(LINEARLIST* list,int listLen);void  InitLinearList(LINEARLIST* list);void  EchoLinearList(LINEARLIST* list);void  DestroyLinearList(LINEARLIST* list);BOOL  IsLinearListEmpty(LINEARLIST* list);BOOL  IsLinearListFull(LINEARLIST* list);void  ClearLinearList(LINEARLIST* list);unsigned short int SearchLinearList(LINEARLIST* list,int element);void  AddNodeLinearList(LINEARLIST* list,int elementPos,int elementInsert);BOOL  DeNodeLinearList(LINEARLIST* list,int element);BOOL  GetValueLinearList(LINEARLIST* list,int index,int* retValue);int main(const int argc, const char* argv[]){    LINEARLIST list;    list.List=NULL;    list.ListLen=0;    list.CurrentLen=0;    CreateLinearList(&list,10);    InitLinearList(&list);    EchoLinearList(&list);    putchar(\n);    ClearLinearList(&list);    EchoLinearList(&list);    putchar(\n);    getchar();    getchar();    return 0;}/*函数功能:    创建顺序表函数原型:    void  CreateLinearList(LINEARLIST* list,int listLen)函数参数:    LINEARLIST* list:待创建的顺序表结构体指针    int listLen: 待初始化线性表长度返回值:    无返回值异常:    传递空指针*/void  CreateLinearList(LINEARLIST* list,int listLen){    if(NULL==list)    {        exit(0);    }    else    {        list->List=(int*)malloc(sizeof(int)*listLen);    }    if(list->List ==NULL)    {        list->CurrentLen=0;        list->ListLen=0;        exit(0);    }    else    {        list->CurrentLen=0;        list->ListLen=listLen;    }}/*函数功能:    初始化顺序表函数原型:    void InitLinearList(LINEARLIST* list)函数参数:    LINEARLIST* list:待初始化的顺序表结构体指针返回值:    无异常:    传递空指针*/void InitLinearList(LINEARLIST* list){    int i;    //实际应用中,这里应该对list是否为空做测试    if(list->CurrentLen!=0)    {        puts("The Linear List is not empty");        return ;    }    else    {        printf("Please input the element for the list,you can enter %d numbers:\n",list->ListLen);        list->CurrentLen++;        while(list->CurrentLen <= list->ListLen)        {            scanf("%d",&i);            list->List[list->CurrentLen-1]=i;            list->CurrentLen++;        }        fflush(stdin);    }}/*函数功能:    打印顺序表函数原型:    void  EchoLinearList(LINEARLIST* list)函数参数:    LINEARLIST* list:待打印的顺序表结构体指针返回值:    无异常:    传递空指针*/void EchoLinearList(LINEARLIST* list){    unsigned short int i;    //实际应用中,这里应该对list是否为空做测试    if(list->List ==NULL  )    {        puts("The list not exist,then will quit");        exit(0);    }    i=0;    while(i< list->CurrentLen-1)    {        printf("%3d ",list->List[i]);        i++;    }}/*函数功能:    销毁顺序表函数原型:    void  DestroyLinearList(LINEARLIST* list)函数参数:    LINEARLIST* list:待销毁顺序表存储指针返回值:    无异常:    传递空指针*/void  DestroyLinearList(LINEARLIST* list){    if(list==NULL )    {        puts("There is not a list to destroy");        exit(0);    }    if(list->List != NULL)    {        free(list->List);        list->CurrentLen=0;        list->ListLen=0;    }}/*函数功能:    测试顺序表是否为空函数原型:    BOOL  IsLinearListEmpty(LINEARLIST* list)函数参数:    LINEARLIST* list:待测试顺序表指针返回值:    如果为空则返回TURE,否则返回FALSE;异常:    传递空指针*/BOOL  IsLinearListEmpty(LINEARLIST* list){    //实际应用中,需测试list是否为空    if(list->List!=NULL &&list->CurrentLen !=0)    {        return TRUE;    }    else    {        return FALSE;    }}/*函数功能:    测试顺序表是否满函数原型:    BOOL  IsLinearListFull(LINEARLIST* list)函数参数:    LINEARLIST* list:待测试顺序表指针返回值:    如果满返回TRUE*/BOOL  IsLinearListFull(LINEARLIST* list){    //实际应用,需要测试list是否为空    if(list->List !=NULL && list->CurrentLen == list->ListLen)    {        return TRUE;    }    else    {        return FALSE;    }}/*函数功能:    将顺序表的元素全部赋值为0函数原型:    void  ClearLinearList(LINEARLIST* list)函数参数:    LINEARLIST* list:待处理顺序表指针返回值:    无异常:    传递空指针*/void  ClearLinearList(LINEARLIST* list){    int i;    //实际应用中,应该对list是否为空进行测试    if(list->List ==NULL)    {        puts("There is not a list to clear");        exit(0);    }    else    {        i=0;        while(i<list->CurrentLen )        {            list->List [i]=0;            i++;        }    }}/*函数功能:    搜索顺序表中是否存在某个元素函数原型:    unsigned short int SearchLinearList(LINEARLIST* list,int element)函数参数:    LINEARLIST* list:元素待查找所在的顺序表指针    int element:待查找元素返回值:    如果存在则返回元素的位置,否则返回0异常:    传递空指针*/unsigned short int SearchLinearList(LINEARLIST* list,int element){    int i;    //实际应用需要对list是否为空进行测试    if(list->List !=NULL && list->ListLen!=0)    {        for(i=0;i<list->CurrentLen;i++)        {            if(!(list->List[i] ^ element))            {                return i+1;            }        }    }    return  0;}/*函数功能:    在顺序表中插入新的元素    1、如果存在指定的元素,则将新元素插入到指定元素之后    2、如果不存在指定的元素,则插入到顺序表最后    3、如果顺序表已满则不插入    4、如果顺序表为空,则将元素作为顺序表的第一个元素函数原型:    void  AddNodeLinearList(LINEARLIST* list,int elementPos,int elementInsert)函数参数:    LINEARLIST* list:待插入元素的顺序表指针    int elementPos:指定元素    int elementInsert:待插入元素返回值:    无返回值异常:    传递空指针*/void  AddNodeLinearList(LINEARLIST* list,int elementPos,int elementInsert){    //实际应用中,需测试list是否为空    int i,        j;    //已满,不插入    if(IsLinearListFull(list))    {        puts("The sequnue list is full");        return ;    }    //空表,插入到第一个元素位置处    if(IsLinearListEmpty(list))    {        list->CurrentLen=1;        list->List [0]=elementInsert;    }        i=SearchLinearList(list,elementPos);    if(!i)    {            //不存在指定元素        list->List[list->CurrentLen ]=elementInsert;        list->CurrentLen ++;    }    else    {        //存在指定元素        j=list->CurrentLen;        while(j>i)        {            list->List[j]=list->List[j-1];            j--;        }        list->List[i]=elementInsert;        list->CurrentLen ++;    }    return ;}/*函数功能:    删除顺序表中指定的元素    1、如果是空表则不删除    2、如果不存在指定元素,则不删除函数原型:    BOOL  DeNodeLinearList(LINEARLIST* list,int element)函数参数:    LINEARLIST* list:待处理的顺序表指针    int element:待删除的指定元素返回值:    TRUE:成功删除元素    FALSE:未成功删除元素异常:    传递空指针*/BOOL  DeNodeLinearList(LINEARLIST* list,int element){    //实际应用中,需测试list是否为空    int i,        j;        //如果是空表则返回FALSE    if( IsLinearListEmpty(list))    {        return FALSE;    }        while(i=SearchLinearList(list,element))    {        j=i-1;        while(j<list->CurrentLen)        {            list->List[j]=list->List[j+1];            j++;        }        list->CurrentLen --;    }    return TRUE;}/*函数功能:    返回指定索引位置处的值函数原型:    int  GetValueLinearList(LINEARLIST* list,int index)函数参数:    LINEARLIST* list:待处理的顺序表的指针    int index:指定的索引位置    int* retValue:存储指定位置的值返回值:    如果成功索引则返回TRUE,否则返回FALSE,并且将retValue置为0异常:    传递空指针*/BOOL  GetValueLinearList(LINEARLIST* list,int index,int* retValue){    //实际应用中,需测试list是否为空    if(IsLinearListEmpty(list)|| index > list->CurrentLen )    {        *retValue=http://www.mamicode.com/0;        return FALSE;    }    else    {        *retValue=http://www.mamicode.com/list->List[index-1];        return TRUE;    }}

 

【算法和数据结构】_17_小算法_线性结构:顺序表