第三周项目二 建设“顺序表”算法库

来源:互联网 发布:java pdf转word 编辑:程序博客网 时间:2024/05/16 08:39
  1. /*  
  2. *Copyright (c) 2016, 烟台大学计算机与控制工程学院  
  3. *All rights reserved.  
  4. *文件名称:aa  
  5. *作    者:申鹏鹏  
  6. *完成日期:2016年9月17日  
  7. *问题描述:本文为算法库中的第一个,针对线性表中的顺序存储结构,实现各种基本运算。   
  8.    算法库包括两个文件:   
  9.    头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;   
  10.    源文件:list.cpp,包含实现各种算法的函数的定义   
  11. */
  12. 问题及代码:
  13. 1、list.h的代码:
    1. #ifndef LIST_H_INCLUDED  
    2. #define LIST_H_INCLUDED  
    3.   
    4. #define MaxSize 50  
    5. typedef int ElemType;  
    6. typedef struct  
    7. {  
    8.     ElemType data[MaxSize];  
    9.     int length;  
    10. } SqList;  
    11. void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表  
    12. void InitList(SqList *&L);//初始化线性表InitList(L)  
    13. void DestroyList(SqList *&L);//销毁线性表DestroyList(L)  
    14. bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)  
    15. int ListLength(SqList *L);//求线性表的长度ListLength(L)  
    16. void DispList(SqList *L);//输出线性表DispList(L)  
    17. bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)  
    18. int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)  
    19. bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)  
    20. bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED  
    21. #endif
    2、list.cpp的代码:
    1. #include <stdio.h>  
    2. #include <malloc.h>  
    3. #include "list.h"  
    4.   
    5. //用数组创建线性表  
    6. void CreateList(SqList *&L, ElemType a[], int n)  
    7. {  
    8.     int i;  
    9.     L=(SqList *)malloc(sizeof(SqList));  
    10.     for (i=0; i<n; i++)  
    11.         L->data[i]=a[i];  
    12.     L->length=n;  
    13. }  
    14.   
    15. //初始化线性表InitList(L)  
    16. void InitList(SqList *&L)   //引用型指针  
    17. {  
    18.     L=(SqList *)malloc(sizeof(SqList));  
    19.     //分配存放线性表的空间  
    20.     L->length=0;  
    21. }  
    22.   
    23. //销毁线性表DestroyList(L)  
    24. void DestroyList(SqList *&L)  
    25. {  
    26.     free(L);  
    27. }  
    28.   
    29. //判定是否为空表ListEmpty(L)  
    30. bool ListEmpty(SqList *L)  
    31. {  
    32.     return(L->length==0);  
    33. }  
    34.   
    35. //求线性表的长度ListLength(L)  
    36. int ListLength(SqList *L)  
    37. {  
    38.     return(L->length);  
    39. }  
    40.   
    41. //输出线性表DispList(L)  
    42. void DispList(SqList *L)  
    43. {  
    44.     int i;  
    45.     if (ListEmpty(L)) return;  
    46.     for (i=0; i<L->length; i++)  
    47.         printf("%d ",L->data[i]);  
    48.     printf("\n");  
    49. }  
    50.   
    51. //求某个数据元素值GetElem(L,i,e)  
    52. bool GetElem(SqList *L,int i,ElemType &e)  
    53. {  
    54.     if (i<1 || i>L->length)  return false;  
    55.     e=L->data[i-1];  
    56.     return true;  
    57. }  
    58.   
    59. //按元素值查找LocateElem(L,e)  
    60. int LocateElem(SqList *L, ElemType e)  
    61. {  
    62.     int i=0;  
    63.     while (i<L->length && L->data[i]!=e) i++;  
    64.     if (i>=L->length)  return 0;  
    65.     else  return i+1;  
    66. }  
    67.   
    68. //插入数据元素ListInsert(L,i,e)  
    69. bool ListInsert(SqList *&L,int i,ElemType e)  
    70. {  
    71.     int j;  
    72.     if (i<1 || i>L->length+1)  
    73.         return false;   //参数错误时返回false  
    74.     i--;            //将顺序表逻辑序号转化为物理序号  
    75.     for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置  
    76.         L->data[j]=L->data[j-1];  
    77.     L->data[i]=e;           //插入元素e  
    78.     L->length++;            //顺序表长度增1  
    79.     return true;            //成功插入返回true  
    80. }  
    81.   
    82. //删除数据元素ListDelete(L,i,e)  
    83. bool ListDelete(SqList *&L,int i,ElemType &e)  
    84. {  
    85.     int j;  
    86.     if (i<1 || i>L->length)  //参数错误时返回false  
    87.         return false;  
    88.     i--;        //将顺序表逻辑序号转化为物理序号  
    89.     e=L->data[i];  
    90.     for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移  
    91.         L->data[j]=L->data[j+1];  
    92.     L->length--;              //顺序表长度减1  
    93.     return true;              //成功删除返回true  
    94. }
    3、main的测试函数的代码
    1. #include "list.h"  
    2. int main()  
    3. {  
    4.     SqList *sq;  
    5.     ElemType x[6]= {5,8,7,2,4,9};  
    6.     CreateList(sq, x, 6);  
    7.     DispList(sq);  
    8.     return 0;  
    9. }
    运行结果:
0 0