zoukankan      html  css  js  c++  java
  • 数据结构之c++感悟

    #include<iostream.h> 头文件;

    #include<iostream.h>
    #define MAX 1024
    typedef int Elemtype;
    typedef struct
    {
        int *elem;
        int length;
    }Sqlist;
    
    void Initlist(Sqlist &L)
    {
        L.elem=new int[MAX];
        if(L.elem==NULL)
            return;
        else
            L.length=0;
    }
    
    void createlist(Sqlist &L)
    {
        cin>>L.length;
        for(int i=0;i<L.length;i++)
            cin>>L.elem[i];
    }
    
    void printlist(Sqlist L)
    {
        for(int i=0;i<L.length;i++)
            cout<<L.elem[i]<<'	';
    }
    
    int emptylist(Sqlist L)
    {
        if(L.length==0)
            return 0;
        else
            return 1;
    }
    
    int  queryelem(Sqlist L,Elemtype e)
    {
        for(int i=0;i<L.length;i++)
            if(L.elem[i]==e)
                return i+1;
        return 0;
    }
    
    void getelem(Sqlist L,int i,int &e)
    {
        if(i<1 || i>L.length)
            return;
        else
            e=L.elem[i-1];
    }
    
    void insertelem(Sqlist &L,int i,int e)
    {
        if(i<1 || i>L.length+1)
            return;
        else
            for(int k=L.length-1;k>i-1;k--)
                L.elem[k+1]=L.elem[k];
                L.elem[i-1]=e;
                L.length ++;
    }
            
    void main()
    {
        Sqlist L;
        Initlist(L);
        createlist(L);
        printlist(L);
        int null;
        null=emptylist(L);
        if(null==0)
            cout<<"it is nulllist";
        else
            cout<<" 
    it is not nulllist";
        int e;
        cout<<"
    put on query elem";
        cin>>e;
        int i;
        i=queryelem(L,e);
        if(i!=0)
            cout<<i;
        cout<<"
     put on di ji ge elem";
        cin>>i;
        getelem(L,i,e);
        cout<<e;
        cout<<"put on insert elem and locate";
        cin>>i>>e;
        insertelem(L,i,e);
        printlist(L);
    }
    
        


    #define MAX 1024 宏定义
    typedef int Elemtype; typedef                                     (取一个别名), int的别名就是Elemtype。
    typedef struct                   定义一个结构体,这个结构体的名字叫做SqList;这个SqList的结构体中有整型的*elem,整型的length
    {
    Elemtype *elem;
    int length;
    }SqList;
    void InitList(SqList &L)                初始化函数来初始我定义的SqList &L这个结构体的变量,注意加&是改变L这个结构体变量的数据。
    {
    L.elem=new Elemtype[MAX];              通过new函数 申请一个整型的数组,将这个数组赋予给L.elem这个指针,L.elem是调用这个elem这个整型指针。
    if(L.elem==NULL)                  如果这个空间为空的话,则不带返回值的return语句只能用于返回类型为void的函数,return语句是为了引起函数的强制结束,
                          这种用法类似于循环结构中的break语句的作用。new函数申请整型数组赋予结构体当中的指针。为什么要赋予给指针,因为

                          在c++中,数组其实指针来解释的。    
    return ;                   判断开辟空间成功还是失败,失败是NULL,直接退出。成功为0
    else
    L.length=0;                 否则就是有空间,但是这个空间还没有数据,所以他的长度为0. 有空间就相当于开辟了一个长方形。
    }

    void creat_list(SqList &L)            创建一个有数据的线性表的函数。
    {
    cin>>L.length;               输入这个线性表的长度,例如你输入5,代表在这个长方形中划4条竖线,不就有5个格子呢。5个格子还没有数据对不对啊?
    for(int i=0;i<L.length;i++)           所以我们就需要用for循环来为这5个格子填写你想要的数据,不就行了。for循环输入每个具体的数据
    cin>>L.elem[i];                电脑出现让你输5次。你就输呗。
    }
    void print(SqList L)              创建一个打印函数。结构体Sqlist定义的L为什么没有像以前那样加&号,是因为打印函数根本没有改变L的数据啊
    {
    for(int i=0;i<L.length;i++)            打印不就循环小于你输入这个线性表的长度。  直接用for循环遍历即可打印。
    cout<<L.elem[i]<<' ';             输出你打印的就行了。  打印好看点,打印的就不会挤在一起呢。 相当于tab制表符的缩写,跳过四个空格;
    }
    int IsEmpty(SqList L)              判断这个线性表是否为空的话,
    {
    if(L.length==0)                 如果是1的话就为真。   其实就是判断线性表的长度是否为0;
    return 1;
    else
    return 0;                    否则就为假呗。
    }
    void Getelem(SqList L,int i,Elemtype &e)       获取L中的第i个元素。第i个元素是就信息世界而言的,是对人类好理解的,对程序而言的话。第i个元素的是
                              第i-1个元素。知道获取的范围;
    {
    if(i<1||i>L.length)                  刁难一下,获取的不在这个线性表的长度范围之内。
    return;
    else
    e=L.elem[i-1];                 如果在的话,就把这个第i个元素的值赋给e呗。 线性表中的第几个元素对应的值都是固定的,因此根本就不必要想遍历。
    }
    int Locatelem(SqList L,Elemtype e)          这个函数就是判断这个线性表中的数据e是在第几个位置。Locatelem就是干这活的。
    {
    for(int i=0;i<L.length;i++)//n              首先遍历我这个线性表L中的所有数据,遍历最好用的当然是for循环呢。遍历这个线性表只要小于这个线性表的
                             长度即可         查询一个元素的位置当然第一步就是遍历所有的元素,看是否有符合条件的,
    if(L.elem[i]==e) //n T(n)=O(n) T(n)=O(1)         遍历一个,判断一个,看他是否是在第e个位置。
    return i+1;                      是的话,放回一个i+1,为什么是i+1呢,因为对程序而言,他想的第一个是第从0开始,而我们人类想的第一个
                              是从第1开始的,所以这个变成了i+1,而不是i呢。
    return 0;                       如果全部遍历完了之后,都没有找到数据e,就返回0呢呗。
    }
    void InsertList(SqList &L,int i,Elemtype e)        这个一个插入函数,就是在第i个插入e这个元素。
    {
    if(i<1||i>L.length+1)                刁难一下,就是如果i<1的话和i>这个长度加1的话,为什么这个长度要加1呢,因为大于线性表的长度是可以,如
                            线性表的长度是5,大于5,也就是第6个,在第6个插入元素e,是完全ok的啦。  判断插入的是否在这个范围?
    cout<<"位置不合理 ";
    else
    if(L.length>=MAX)               相当于把这张纸开辟出的长方形已经占满呢,无法再开辟呢,说明就无法再插入呢,所以表就已满呢
    cout<<"表已满 ";
    else
    {
    for(int j=L.length-1;j>=i-1;j--)             首先我肯定是遍历后三个手指,也就是第i之后的元素。     插入肯定要遍历呢。遍历后向后挪一位。空的位置赋予新值
    L.elem[j+1]=L.elem[j];                 然后把三个手指往后挪一位就可以。就在第i处空出一个位置呢。 表自增。
    L.elem[i-1]=e;                   然后把空出的位置给e即可
    L.length++;                   在把整个线性表的长度加1即可。
    }
    }
    void main()                   主函数的定义
    {
    SqList L;                      结构体sqlist定义一个名为L的线性表。
    InitList(L);                      通过初始化函数初始这个线性表。就是给这个线性表开辟一个空间,相当于给一张纸开辟出一个长方形。
    creat_list(L);                    创建一个有数据的线性表,相当于给这张纸画4条竖线。
    print(L);                        打印这个线性表
    int len;
    len=IsEmpty(L);
    if(len==1)
    cout<<"空表";
    else
    {
    cout<<"非空";
    }
    int i;
    cout<<" 请输入查找的位置:";
    cin>>i;
    Elemtype e;
    Getelem(L,i,e);                     获取线性表中第i个元素,并将第i个元素的值赋予e
    cout<<e<<endl;
    cout<<" 请输入查找的元素的值:";
    cin>>e;
    i=Locatelem(L,e);                      查找线性表中e这个元素是在线性表中排第几个。
    if(i!=0)
    cout<<i<<endl;
    cout<<" 请输入插入的位置和元素的值:";
    cin>>i>>e;
    InsertList(L,i, e);                        在线性表L中的第i处插入名为e的元素。
    print(L);

    }

    数据结构默写代码:

     1 #include<iostream.h>
     2 #define MAX 1024
     3 typedef int Elemtype;
     4 typedef struct
     5 {
     6     Elemtype *elem;
     7     int length;
     8 }Sqlist;
     9 
    10 void Initlist(Sqlist &L)
    11 {
    12     L.elem=new Elemtype[MAX];
    13     if(L.elem==NULL)
    14         return;
    15     else
    16         L.length=0;
    17 }
    18 
    19 void createlist(Sqlist &L)
    20 {
    21     cin>>L.length;
    22     for(int i=0;i<L.length;i++)
    23         cin>>L.elem[i];
    24 }
    25 
    26 void printlist(Sqlist L)
    27 {
    28     for(int i=0;i<L.length;i++)
    29         cout<<L.elem[i]<<'	';
    30 }
    31 
    32 int emptylist(Sqlist L)
    33 {
    34     if(L.length==0)
    35         return 1;
    36     else
    37         return 0;
    38 }
    39 
    40 void getelem(Sqlist L,int i,int &e)
    41 {
    42     if(i<1||i>L.length)
    43         return;
    44     else
    45         e=L.elem[i-1];
    46 }
    47 
    48 void insertelem(Sqlist &L,int i,int e)
    49 {
    50     if(i<1 || i>L.length+1)
    51         return;
    52     else
    53         for(int k=L.length-1;k>=i-1;k--)              为什么k=L.length-1呢,因为他想第5个手指,对程序而言,其实就是4,0是第一个。把4往后挪一位,变成5。
    54             L.elem[k+1]=L.elem[k];                 
    55         L.elem[i-1]=e;
    56         L.length ++;
    57 }
    58 
    59 int locateelem(Sqlist L,int e)
    60 {
    61     for(int i=0;i<L.length;i++)
    62         if(L.elem[i]==e)
    63             return i+1;
    64     return 0;
    65 }
    66 void main()
    67 {
    68     Sqlist L;
    69     Initlist(L);
    70     createlist(L);
    71     printlist(L);
    72     int null;
    73     null=emptylist(L);
    74     if(null==1)
    75         cout<<"it is nulllist";
    76     else
    77         cout<<"it is not nulllist"<<"
    ";
    78     int i;
    79     cout<<"put on locate"<<'	';
    80     cin>>i;
    81     int e;
    82     getelem(L,i,e);
    83     cout<<e;
    84     cout<<"
    put on your insert elem locate and elem value";
    85     cin>>i>>e;
    86     insertelem(L,i,e);
    87     printlist(L);
    88     cout<<"
    put on your query elem";
    89     cin>>e;
    90     i=locateelem(L,e);
    91     if(i!=0)
    92         cout<<i<<endl;
    93     
    94 }


    void deleteelem(Sqlist &L,int i)
    {
    if(i<1 || i>L.length+1)
    return;
    else
    for(int k=i;k<=L.length-1;k++)
    L.elem[k-1]=L.elem[k];
    L.length --;
    }

  • 相关阅读:
    matlab curve fitting tool
    simulink model configuration parameter
    MATLAB小知识
    电源噪声与纹波
    各种“地”—— 各种“GND”
    一个不错的充电方案论坛:
    pre -regulator 前端稳压器
    LT4020替代方案
    power delivery功率输出
    LTC4020锂电池充电模块开发记录
  • 原文地址:https://www.cnblogs.com/xnb123/p/8584744.html
Copyright © 2011-2022 走看看