数据结构顺序表的实现

来源:互联网 发布:什么推广软件效果好 编辑:程序博客网 时间:2024/06/04 18:42

        一直想花时间好好学下数据结构但由于种种原因终未成行,这几天趁闲终于开始学,为了能快速的掌握数据结构,我在学得时候是看完书马上用代码来实现书上的算法,所以觉得做笔记还是很有必要的,虽然我很少有做笔记的习惯,但这次例外了。只求能最快的时间写出像样的代码,为了能最快的获得提高,希望大家能指出我的错误,为此我把我做的第一个函数贴出来,希望大家指正。

/* * 文件名:SqList.h * 功能  : 顺序表C语言库 * 版本  :V1.0 * 作者  : * 日期  :2013年7月28 * Email :zhaogoodwell@gmail.com */#ifndef  _SqList_H_#define  _SqList_H_#include "stdio.h"#include "stdlib.h"#include "malloc.h"//顺序表达小初始定义#define  List_Init_Size     100#define  ListIncreMent      10#define  Ture               1#define  False              0#define  OK                 1#define  Error              0#define  Infeasible        -1#define   OverFlow         -2////数据类型定义typedef int ElemType;typedef struct{    ElemType  *elem;    int       length;    int       listsize;}SqList;/* 函数名      :InitList() * 输入参数    :无 * 输出参数    :得到的空表; * */SqList* InitList();   //初始化表;/* 函数名      :DestroyList(SqList *L) * 输入参数    :SqList 型指针; * 输出参数    :SqLisr 表 * */void DestroyList(SqList *L);/* 函数名      :ClearList(*L) * 输入参数    :SqList 型指针; * 输出参数    :无,清空表; * */void ClearList(SqList *L);/* 函数名      :IsListEmpty(*L) * 输入参数    :SqList 型指针; * 输出参数    :表空返回 Ture ,非空返回 Flase; * */int IsListEmpty(SqList *L);/* 函数名      :ListLength(*L) * 输入参数    :SqList 型指针; * 输出参数    :返回当前表长; * */int ListLength(SqList *L);/* 函数名      :GetElem(*L,i) * 输入参数    :SqList 型指针,元素号i * 输出参数    :返回表L,第i个元素。 */ElemType GetElem(SqList *L,int i);/* 函数名      :LocationElem(*L,e) * 输入参数    :SqList 型指针,元素e * 输出参数    :返回表L中e的位置; */ int LocationElem(SqList *L ,ElemType e);/* 函数名      :ListInsert(*L,e); * 输入参数    :SqList 型指针,元素e * 输出参数    :无,把e插入表Lzhong */void ListInsert(SqList *L,ElemType e);/* 函数名      :ListDelete(*L,e); * 输入参数    :SqList 型指针,元素e * 输出参数    :无,删除表中元素e; */void ListDelete(SqList *L,ElemType e);/* 函数名      :ShowListInformation(*l); * 输入参数    :SqList 型指针 * 输出参数    :打印链表信息; */void ShowListInformation(SqList *L);#endif // _SqList_H_



/* * 文件名:SqList.c * 功能  : 顺序表C语言库 * 版本  :V1.0 * 作者   * 日期  :2013年7月28 * Email :zhaogoodwell@gmail.com */#include "stdio.h"#include "stdlib.h"#include "SqList.h"SqList* InitList()  //线性表初始化{SqList *L;    L->elem=(ElemType *)malloc(List_Init_Size*sizeof(ElemType));        if(!L->elem)            {    printf(" Init:Error No Menory For Program \n");                 exit(1);            }     L->length=0;     L->listsize=List_Init_Size; return L;};void DestroyList(SqList *L)           //销毁表操作{   if(L->elem==NULL)   {       printf("List Not exit!\n");       exit(1);   }   else    {        (L->elem)=NULL;    }}void ClearList(SqList *L)       //清空链表{    if(L->elem==NULL)    {        printf("List Not exit!\n");        exit(1);    }    else        L->length=0;};int IsListEmpty(SqList *L)      //链表判空{     if(L->elem==NULL)        {            printf("List Not exit!\n");            exit(1);        }    else        if(L->length==0)           return(Ture);        else        return(False);}int ListLength(SqList *L)       //链表长度{     if(L->elem==NULL)        {            printf("List Not exit!\n");            exit(1);        }    else        return(L->length);}ElemType GetElem(SqList *L,int i)      //获取表中第i号元素{    if(L->elem==NULL)        {            printf("List Not exit!\n");            exit(1);        }    return ((L->elem)[i]);}int LocationElem(SqList *L ,ElemType e)   //获取元素e列表中的位置{         int i=0;    if(L->elem==NULL)        {            printf("List Not exit!\n");            exit(1);        }    while(i<=(L->length))    {        if((L->elem)[i]==e)            return(i);            i++;    }    if(i==(L->length))    {        printf("The %ElemType Is Not exit In the List",e);        exit(1);    }}void ListInsert(SqList *L,ElemType e)       //插入数据{        ElemType *newbase=NULL;        if(L->elem==NULL)            {                 printf("List Not exit!\n");                 exit(1);             }        if((L->length)>=(L->listsize))        {                newbase=(ElemType *)realloc(L->elem,((L->listsize)+ListIncreMent)*sizeof(ElemType));                L->elem=newbase;       if(newbase==NULL)         {            printf("No More Memory For Your List!\n");            exit(1);         }       }    ++(L->length);    (L->elem)[(L->length)-1]=e;}void ListDelete(SqList *L,ElemType e){    int  i,location;    if(L->elem==NULL)        {            printf("List Not exit!\n");            exit(1);        }        location=LocationElem(L,e);    for(i=location;i<L->length;i++)    {        (L->elem)[i]=(L->elem)[i+1];    }    (L->length)--;}void ShowListInformation(SqList *L){    int i;    if(L->elem==NULL)        {            printf("List Not exit!\n");            exit(1);        }    printf("链表信息  :\n");    printf("表长度    :%d \n",L->length);    printf("\n");    printf("表        :\n");    printf("表最大长度:%d\n",L->listsize);    for(i=0;i<(L->length);i++)    {        printf("%8d",(L->elem)[i]);    }    printf("\n");}




原创粉丝点击