zoukankan      html  css  js  c++  java
  • 线性表相关操作实现

    /**
     * ADT 线性表(List)
     * Data
     * Operation
     *     InitList(*L);
     *     ListEmpty(L);
     *     ClearList(*L);
     *     GetElem(L,i,*e);
     *     LocateElem(L,e);
     *     ListInsert(*L,i,e);
     *     ListDelete(*L,i,*e);
     *     ListLength(L);
     * endADT
     */
    #include <stdio.h>
    
    #define MAXSIZE 10
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    #define INFEASIBLE -1
    #define OVERFLOW -2
    
    typedef int Status;
    typedef int ElemType;
    typedef struct
    {
        ElemType data[MAXSIZE];//会初始化为零么?
        int length;
    }SqList;
    
    Status MakeData(int data[]);//初始化赋值列表
    Status InitList(SqList *L, int data[]);//初始化
    Status ListEmpty(SqList L);//为空返回true,为假返回false
    Status ClearList(SqList *L);//清空线性表
    Status GetElem(SqList L, int i, ElemType *e);//返回i位置上的值
    Status LocateElem(SqList L, ElemType e);//查找与e相同的元素,查找成功就返回序号,不成,则返回0
    Status ListInsert(SqList *L, int i, ElemType e);//i位置上插入e
    Status ListDelete(SqList *L, int i, ElemType *e);//删除i上的元素
    Status ListLength(SqList L);//返回元素个数
    
    int main()
    {
        SqList L;
        int data[MAXSIZE-5];//留点空余,以作后面的操作
    
        MakeData(data);
        InitList(&L, data);
        printf("线性表长度为:%d
    ", ListLength(L));
        ListEmpty(L);
        printf("线性表长度为:%d
    ", ListLength(L));
    
        ElemType e, i;
        printf("请输入你想要的位置i:
    ");
        scanf("%d", &i);
        GetElem(L, i, &e);
        printf("%d
    ", e);
        printf("与e相等的元素位于%d
    ", LocateElem(L, e));
        ListInsert(&L, i, e);
        printf("线性表长度为:%d
    ", ListLength(L));
        ListDelete(&L, i, &e);
        printf("线性表长度为:%d
    ", ListLength(L));
    
        ClearList(&L);
        printf("线性表长度为:%d
    ", ListLength(L));
    
        return 0;
    }
    
    Status MakeData(int data[])
    {
        for (int i = 0; i < MAXSIZE-5; ++i)
        {
            data[i] = i+2;
        }
    
        return OK;
    }
    
    Status InitList(SqList *L, int data[])
    {
        L->length = 0;
        for (int i = 0; i < MAXSIZE-5; ++i)
        {
            L->data[i] = data[i];
            L->length++;
        }
        for (int i = MAXSIZE-5; i < MAXSIZE; ++i)
        {
            L->data[i] = 0;
        }
    
        return OK;
    }
    
    Status ListEmpty(SqList L)
    {
        if (L.length == 0)
        {
            return TRUE;
        }
    
        return FALSE;
    }
    
    Status ClearList(SqList *L)
    {
        if (L->length == 0)
        {
            return OK;
        }
    
        for (int i = 0; i < L->length; ++i)
        {
            L->data[i] = 0;
        }
    
        return OK;
    }
    
    Status GetElem(SqList L, int i, ElemType *e)
    {
        if (L.length==0 || i<1 || i>L.length)
        {
            return ERROR;
        }
        *e = L.data[i-1];
    
        return OK;
    }
    
    Status ListInsert(SqList *L, int i, ElemType e)
    {
        int k;
    
        if (L->length == MAXSIZE)
        {
            return ERROR;
        }
        if (i<1 || i>L->length+1)
        {
            return ERROR;
        }
        if (i<=L->length)
        {
            for (k=L->length-1; k>=i-1; k--)
            {
                L->data[k+1] = L->data[k];//向后移动
            }
        }
        L->data[i-1] = e;
        L->length++;
    
        return 0;
    }
    
    Status ListDelete(SqList *L, int i, ElemType *e)
    {
        int k;
    
        if (L->length == 0)
        {
            return ERROR;
        }
        if(i<1 || i>L->length)
        {
            return ERROR;
        }
        *e = L->data[i-1];
        if (i<L->length)
        {
            for (k=i; k<L->length; k++)
            {
                L->data[k-1] = L->data[k];//向前移动
            }
            L->data[L->length-1] = 0;
        }
        L->length--;
    
        return OK;
    }
    
    Status LocateElem(SqList L, ElemType e)
    {
        for (int i = 0; i < L.length; ++i)
        {
            if (L.data[i] == e)
            {
                return i+1;
            }
        }
    
        return FALSE;
    }
    
    Status ListLength(SqList L)
    {
        if (!L.length)
        {
            return 0;
        }
    
        //计数这里倒也没必要这么复杂,直接返回L->length就好了嘛
        //这里权当练习
        int count = 0;
        for (int i = 0; i < MAXSIZE; ++i)
        {
            if (L.data[i] == 0)
            {
                return count;
            }
            count++;
        }
    
        return count;//其实就是MAXSIZE
    }
    
  • 相关阅读:
    Java中的多线程
    Service组件
    Notification和Notification Manager的使用
    Java网络编程
    Intent组件
    Android 多任务多线程断点下载
    hdu 2045
    hdu 2492
    poj 2785
    湖南省第六届程序设计大赛D(台球碰撞)
  • 原文地址:https://www.cnblogs.com/lart/p/6569185.html
Copyright © 2011-2022 走看看