zoukankan      html  css  js  c++  java
  • 线性表的基本操作

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct
    {
        int *elem;
        int length;
        int listsize;
    }SqList;

    #define LIST_MAX 10
    #define LIST_ADD 2

    int InitList(SqList *L)
    {
        L->elem=(int*)malloc(LIST_MAX*sizeof(int));
        if(!L->elem)
        {
            printf("初始化失败! ");
            exit(-1);
        }
        L->length=0;
        L->listsize=LIST_MAX;
        return 1;
    }

    int DestoryList(SqList *L)
    {
        free(L->elem);
        L->elem=NULL;
        
        return 1;
    }
    int ClearList(SqList *L)
    {
        L->length=0;
        return 1;
    }
    int GetList(SqList L,int i,int *e)
    {
        if(i<0||i>L.length)
        {
            printf("输出查找的长度超过已有的链表的长度! ");
            exit(-1);
        }
        *e=*(L.elem+i-1);
        return 1;
    }

    int InsertList(SqList *L,int i,int e)
    {
        int *newbase,*p,*q;
        if(i<0||i>L->length+1)
        {
            printf("打算插入的位置超出了链表的长度! ");
            exit(-1);
        }
        if(L->length>=L->listsize)
        {
            newbase=(int *)realloc(L->elem,(L->listsize+LIST_ADD)*sizeof(int));
            if(!newbase)
                exit(-1);
            L->listsize+=LIST_ADD;
            L->elem=L->elem;
        }
        p=L->elem+i-1;
        for(q=L->elem+L->length-1;q>=p;q--)
            *(q+1)=*q;    
        *p=e;    
        ++(L->length);
            
        return 1;
    }
    int ListEmpty(SqList L)
    {
        if(L.length==0)
            return 1;
        else
            return 0;
    }
    int ListLength(SqList L)
    {
        return L.length;
    }
    int DeleteList(SqList *L,int i,int *e)
    {
        int *p;
        if(i<0||i>L->length)
        {
            printf("要删除的元素位置不存在链表中! ");
            exit(-1);
        }
        p=L->elem+i-1;
        *e=*p;
        for(;p<L->elem+L->length-1;p++)
            *p=*(p+1);    
        --L->length;
        return 1;
    }    
    int LocateElem(SqList L,int e,int (*compare)(int v1,int v2))
    {
        int *p;
        int i=1;
        p=L.elem;
        while(i<=L.length&&!compare(*(p++),e))
            ++i;
        if(i<=L.length)
            return i;
        else
            return 0;
    }    
    int equal(int v1,int v2)
    {
        if(v1==v2)
            return 1;
        else
            return 0;
    }

    int PriorElem(SqList L,int cur_e,int *pre_e)
    {
        int i;
        i=LocateElem(L,cur_e,equal);
        if(i>1)
        {
            *pre_e=*(L.elem+i-2);
            return 1;
        }
        else
        {
            printf("没有前驱! ");
            exit(-1);
        }
    }
    int NextElem(SqList L,int cur_e,int *next_e)
    {
        int i=1;
        int *p=L.elem;
        while(i<L.length&&*p!=cur_e)
        {
            ++i;
            ++p;
        }
        if(i==L.length)
            return 0;
        else
        {
            *next_e=*(++p);
            return 1;
        }
    }
    int ListTraverse(SqList L,int (*visit)(int e))
    {
        int i=1;
        for(i=1;i<=L.length;i++)
            visit(*(L.elem+i-1));
        return 1;
    }
    int print(int e)
    {
        printf("%d ",e);
        return 1;
    }
    int main()
    {
        int i,e0;
        SqList L;
        InitList(&L);

        for(i=1;i<=11;i++)
            InsertList(&L,i,i*2);
        
        printf("链表是否为空:%d(1.表示空,0表示非空) ",ListEmpty(L));
        
        for(i=1;i<=11;i++)
        {
            GetList(L,i,&e0);
            printf("%d ",e0);
        }

        printf(" ");
        
        DeleteList(&L,1,&e0);
        printf("删除第一个元素%d ",e0);

        printf("该链表的长度为:%d ",ListLength(L));
        
        printf("查找连表中是否存在4,存在的话,它的位置为%d ",LocateElem(L,4,equal));
        
        PriorElem(L,8,&e0);
        printf("请输出8的前一个元素是:%d ",e0);

        NextElem(L,8,&e0);
        printf("请输出8的后一个元素是:%d ",e0);

        ListTraverse(L,print);
        printf(" ");

        DestoryList(&L);

        return 0;
    }

  • 相关阅读:
    软件测试的常阅博客
    使用Silverlight操作ASPNETDB数据库
    在Silverlight中实现跨域访问
    部署Silverlight应用时遇到的问题
    如何在WPF和Silverlight中取得DataTemplate中的命名元素
    [转] Silverlight Navigation(多页面切换、传值)
    如何让Button点击后不得focus
    VS2010无法连接到SQlServer2008 Database file
    常用的gulp插件
    Android通过http协议POST传输方式
  • 原文地址:https://www.cnblogs.com/xiaoshi-com/p/5471271.html
Copyright © 2011-2022 走看看