• 顺序表的功能实现


    顺序表的创建,插入,删除,清空。销毁。查找,输出功能

    #include<stdio.h>

    #include<malloc.h>

    #include<stdlib.h>

    #defineTRUE 1

    #defineFALSE 0

    #defineOK 1

    #defineERROR 0

    #defineINFEASIBLE -1

    #defineOVERFLOW -2

    typedefint Status ;

    typedefint ElemType ;

    //线性表的动态分配顺序存储结构

    #defineLIST_INIT_SIZE 100  //线性表存储空间的初始分配量

    #defineLISTINTCREMENT 10  //线性表存储空间的分配增量

    typedefstruct

    {

        ElemType *elem ; // 存储空间基址

        int length ; //当前长度

        int listsize ; //当前分配的存储容量

    }SqList;

    //初始化顺序表

    StatusInitList_Sq(SqList &L)

    {

        L.elem = (ElemType * )malloc(LIST_INIT_SIZE*sizeof(ElemType)) ;

        if(!L.elem)

           exit(OVERFLOW) ; //存储空间分配失败

        L.length = 0 ;  //空表长度为0

        L.listsize = LIST_INIT_SIZE ; // 初始存储容量

        return OK ;

    }

    voidCreateList(SqList&L) //创建顺序表

    {

        int i; 

        printf("请输入你要创建的顺序表元素个数");

        scanf("%d",&L.length); 

        printf("请输入你要创建的顺序表: ");

        for(i = 0 ; i < L.length ; i++)

        scanf("%d" , &L.elem[i]) ;

    }

    //查找

    Statuslocation( SqList &L,ElemType e)//查找元素的位置

    {

        int i = 0 ;

        while(L.elem[i]!=e &&i<L.length)

            i++;

        if(i>L.length)  return -1;

        else return i+1;//由于c语言是从下标0開始的当i=0时实际上是顺序表的第i+1个元素

    }

    //在顺序表中第i个位置插入一个新的元素e

    StatusListInsert_Sq(SqList &L ,int i ,ElemType e)

    {

        ElemType *newbase,*q,*p;

        if(i < 1 || i > L.length+1 )

           return ERROR ; // i不合法

        if(L.length >= L.listsize)

        {

           //当前存储空间已满,添加分配

           newbase = (ElemType *)realloc(L.elem , (L.listsize+LISTINTCREMENT) * sizeof(ElemType)) ;

           if(!newbase)

              exit(OVERFLOW) ;// 分配地址失败

           L.elem = newbase ;   //新基址

           L.listsize +=LISTINTCREMENT ; // 添加储存容量

        }

        q = &(L.elem[i-1]) ; //q为插入位置

        for(p = &(L.elem[L.length - 1]) ; p>= q ; --p )

           *(p+1) = *p ;//插入位后的元素右移

        *q = e ;  //插入e

        ++L.length ; //表长加1

        return OK ;

    }

    //在顺序表中删除第i个元素。并用e返回其值

    StatusListDelete_Sq(SqList &L , int i , ElemType &e)

    {

        ElemType *q,*p;

        if(i < 1 || i > L.length+1 )

           return ERROR ; // i不合法

        p = &(L.elem[i-1]) ; //p为被删除元素的位置

        e = *p ;//被删除元素的值赋给e

        q = L.elem + L.length - 1 ;//表尾元素的位置

        for(++p ; p <=q ; ++p)

           *(p - 1) = *p ; //被删除的元素之后的元素左移

        --L.length ; //表长减1

        return OK ;

    }

    //推断表是否为空

    StatusListEmpty(SqList &L)

     { //假设L为空表,返回TRUE,否则返回FALSE

      if(L.length==0)

      {

         printf("此表为空表 ");

         return TRUE ;

      }

      else return FALSE;

     }

    //将表置空

     void ClearList(SqList &L)//将L重置为空表

     {

        for(int i = 0; i < L.length; i++)

        {

           L.elem[i] = NULL;

        }

        printf("表已经清空 ");

     }

    //销毁表

    voidBurning_List(SqList &L)

    {

        L.length = 0;

    //  free(L) ;

        printf("表已经销毁 ");

    }

     void print( SqList &L)//输出顺序表

    {

       int i ; 

       for(i = 0 ; i < L.length ; i++)

       printf("%3d" , L.elem[i]);

       printf(" ") ;

    voidmain()

    {

        SqList la ;

        int i , j ; 

        ElemType e ;

        InitList_Sq(la) ;

        CreateList(la) ;//创建表

        //查找

        printf("请输入要查找的元素: ") ;

        scanf("%d" , &e) ;

        j=location(la , e) ; 

        printf("该元素的位置为%d " , j) ;

         //插入

        printf("请输入要插入的位置和元素: ");

        scanf("%d%d" , &i , &e) ;

        ListInsert_Sq(la,i,e) ; 

        printf("输出插入后的顺序表: ") ;

        print(la) ; 

        //删除

        printf("请输入要删除的位置: ") ;

        scanf("%d" , &i) ; 

        ListDelete_Sq(la,i,e) ; 

        printf("删除的那个元素是:%d " , e) ;

        printf("输出删除后的顺序表: ") ;

        print(la) ;

        //清空

        ClearList(la) ;

        print(la) ;

        //销毁

        Burning_List(la) ;

        print(la) ;

    }


  • 相关阅读:
    慎用ViewController的跳转
    Cocos2d中从场景切换到UIViewController视图方法总结
    presentModalViewController
    NSString / NSMutableString 字符串处理,常用代码 (实例)
    NSXMLParser解析xml
    preformselector 多个参数设置
    UITableView 异步加载图片缓存 笔记
    消息通信机制NSNotificationCenter
    UITableView进行讲解 真的是太详细了
    CLR读书笔记第二章 生成,打包,部署和管理应用程序及类型
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7080731.html
Copyright © 2020-2023  润新知