顺序表应用

来源:互联网 发布:java记事本源代码 编辑:程序博客网 时间:2024/06/04 17:46
#define MaxSize 50  02.typedef int ElemType;  03.typedef struct  04.{  05.    ElemType data[MaxSize];  06.    int length;  07.} SqList;  08.void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表  09.void InitList(SqList *&L);//初始化线性表InitList(L)  10.void DestroyList(SqList *&L);//销毁线性表DestroyList(L)  11.bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)  12.int ListLength(SqList *L);//求线性表的长度ListLength(L)  13.void DispList(SqList *L);//输出线性表DispList(L)  14.bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)  15.int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)  16.bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)  17.bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED   list.cpp[cpp] view plain copy 01.#include <stdio.h>  02.#include <malloc.h>  03.#include "list.h"  04.  05.//用数组创建线性表  06.void CreateList(SqList *&L, ElemType a[], int n)  07.{  08.    int i;  09.    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.}   main.cpp[cpp] view plain copy 01.#include "list.h"  02.#include <stdio.h>  03.  04.//删除线性表中,元素值在x到y之间的元素  05.void delx2y(SqList *&L, ElemType x,  ElemType y)  06.{  07.    int k=0,i; //k记录非x的元素个数  08.    ElemType t;  09.    if(x>y)  10.    {  11.        t=x;  12.        x=y;  13.        y=t;  14.    }  15.    for (i=0; i<L->length; i++)  16.        if (L->data[i]<x || L->data[i]>y )  //复制不在[x, y]之间的元素  17.        {  18.            L->data[k]=L->data[i];  19.            k++;  20.        }  21.    L->length=k;  22.}  23.  24.//用main写测试代码  25.int main()  26.{  27.    SqList *sq;  28.    ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};  29.    CreateList(sq, a, 10);  30.    printf("删除前 ");  31.    DispList(sq);  32.  33.    delx2y(sq, 4, 7);  34.  35.    printf("删除后 ");  36.    DispList(sq);  37.    return 0;  38.}  

0 0
原创粉丝点击