zoukankan      html  css  js  c++  java
  • 顺序表

    顺序表

     顺序表属于顺序存储结构,是最简单的顺序表,基本思想是用一段连续的储存单元依次存储线性表的数据元素,一般使用数组来定义,就能实现增,删,改,差等基本操作。
     使用结构体来实现顺序表,结构体中有一个data数组,用来连续存储数据。变量last用来指明当前顺序表中有几个数据,方便访问顺序表。

        typedef struct seqlist{
    
            int data[MAX_LIST];  //数据域,MAX_LIST = 10
            int last; //下标域
        }my_seqlist, *p_my_seqlist;
    

    初始化顺序表

     当需要创建一个顺序表时,可以调用此函数,此函数给顺序表分配一个堆空间,并且将地址返回,接收此返回值用p_my_seqlist变量。

        p_my_seqlist init_list(){
    
            p_my_seqlist p_my_seqlist1 = calloc(1, sizeof(my_seqlist));
            if(NULL == p_my_seqlist1)
                return false;
            return p_my_seqlist1;
        }
    

    插入数据

     当需要在顺序表中插入数据的时候,调用此函数。注意需要传入已经初始化好的顺序表,第二个形参为需要插入的数据。

        int insert_seqlist(p_my_seqlist p_my_seqlist1, int data){
    
            if(NULL == p_my_seqlist1){
    
                printf("LIST指针为空
    ");
                return false;
            }
            if(MAX_LIST <= p_my_seqlist1->last){
    
                printf("顺序表以满,无法建立顺序表
    ");
                printf("p_my_seqlist1->last:%d
    ",p_my_seqlist1->last);
                return false;
        }
    
            p_my_seqlist1->data[p_my_seqlist1->last++] = data;  //每插入一个数据last需要加1,表示顺序表中的数据多了一个
            return true;
        }
    

    打印顺序表

     将顺序表中的数据打印出来。

        int print_seqlist(p_my_seqlist p_my_seqlist1){
    
             int i;
    
             if(NULL == p_my_seqlist1){
    
             printf("LIST指针为空
    ");
             return false;
             }
             printf("p_my_seqlist1->last:%d
    ",p_my_seqlist1->last);
             TRAVERSR(){                  //#define TRAVERSR() for(int i = 0; i < p_my_seqlist1->last; i++) 因为这个循环会反复用到,所以使用了宏定义
    
                 printf("p_my_seqlist->data[%d]:%d
    ", i, p_my_seqlist1->data[i]);
             }
             printf("p_my_seqlist1->last:%d
    ",p_my_seqlist1->last);
            return true;
        }
    

    查找顺序表

     查找顺序表中的数据fdata,并且返回这个数据的下标。

        int find_seqlist(p_my_seqlist p_my_seqlist1, int fdata){
    
            if(NULL == p_my_seqlist1){
    
                printf("LIST指针为空
    ");
                return false;
            }
    
            printf("在顺序表中查找数据:%d
    ", fdata);
            TRAVERSR(){
    
                if(p_my_seqlist1->data[i] == fdata){
    
                    printf("在顺序表中查找到数据:%d
    ", p_my_seqlist1->data[i]);
                    return i;
                }
            
            }
            printf("顺序表中没有这个数据:%d
    ", fdata);
            return 0;
        }
    

    删除数据

     可以调用此函数用来删除一个数据,参数2是删除下标del_num的值,可以配合函数find_seqlist()使用。

        int del_seqlist(p_my_seqlist p_my_seqlist1, int del_num){
    
            if(NULL == p_my_seqlist1){
    
                printf("LIST指针为空
    ");
                return false;
            }
        
            p_my_seqlist1->data[del_num] = p_my_seqlist1->data[del_num+1];
       
            for(;del_num < p_my_seqlist1->last-1;del_num++){
          
                p_my_seqlist1->data[del_num+1] =  p_my_seqlist1->data[del_num+2];
            }
      
    
           p_my_seqlist1->last--;
           printf("del_seqlist:p_my_seqlist1->last:%d
    ",p_my_seqlist1->last);
    
           return true;
    }
    

    修改顺序表

     将data[num]的数据修改为mdata,配合find_seqlist()使用,可以修改一个指定的值。

        int mdata_seqlist(p_my_seqlist p_my_seqlist1, int num, int mdata){
    
            if(NULL == p_my_seqlist1){
    
                printf("LIST指针为空
    ");
                return false;
            }
    
             p_my_seqlist1->data[num] = mdata;
             printf("数据修改为了:p_my_seqlist1->data[num] = : %d
    ", p_my_seqlist1->data[num]);
    
             return true;
    
    }
    

    销毁顺序表

     将顺序表所占的内存释放

        int destroy_seqlist(my_seqlist** p_my_seqlist1) //将&p_my_seqlist1传入
        {
    
            *p_my_seqlist1 = NULL;
            free(*p_my_seqlist1);
            printf("顺序表已被销毁了
    ");
    
            return true;
        }
    

    测试函数

        int test(){
    
            p_my_seqlist p_my_seqlist1;
            //初始化顺序表
            p_my_seqlist1 = init_list();
            int find_data;
    
            if(NULL == p_my_seqlist1)
               return false;
    
            //插入10个数据
            insert_seqlist(p_my_seqlist1, 0);
            insert_seqlist(p_my_seqlist1, 1);
            insert_seqlist(p_my_seqlist1, 2);
            insert_seqlist(p_my_seqlist1, 3);
            insert_seqlist(p_my_seqlist1, 4);
            insert_seqlist(p_my_seqlist1, 5);
            insert_seqlist(p_my_seqlist1, 6);
            insert_seqlist(p_my_seqlist1, 7);
            insert_seqlist(p_my_seqlist1, 8);
            insert_seqlist(p_my_seqlist1, 9);
    
       
            //打印数据
            print_seqlist(p_my_seqlist1);
    
            //查找数据,返回数据的下标
            int num = find_seqlist(p_my_seqlist1,9);
    
            //删除数据
            del_seqlist(p_my_seqlist1, num);
            print_seqlist(p_my_seqlist1);
    
            //修改数据
            num = find_seqlist(p_my_seqlist1,8);
            mdata_seqlist(p_my_seqlist1,num,100);
            print_seqlist(p_my_seqlist1);
    
            //销毁表格
            destroy_seqlist(&p_my_seqlist1);
            printf("%p
    ", p_my_seqlist1);
            insert_seqlist(p_my_seqlist1, 49);    
            print_seqlist(p_my_seqlist1);
            del_seqlist(p_my_seqlist1, 2);
    
            return 1;
        }
    
  • 相关阅读:
    Beta阶段事后诸葛亮分析
    Beta阶段项目复审
    展示博客
    Beta版本测试报告以及Beta版本发布说明
    团队作业8——第二次项目冲刺(Beta阶段)博客汇总
    团队作业8----第二次项目冲刺(beta阶段)5.25
    团队作业8----第二次项目冲刺(beta阶段)5.24
    团队作业8----第二次项目冲刺(beta阶段)5.23
    团队作业8----第二次项目冲刺(beta阶段)5.22
    团队作业8----第二次项目冲刺(beta阶段)5.21
  • 原文地址:https://www.cnblogs.com/ding-ding-light/p/14100403.html
Copyright © 2011-2022 走看看