zoukankan      html  css  js  c++  java
  • 代码,用c++实现线性链表

    #include <iostream>
    #include <stdio.h>
    #include <malloc.h>
    using namespace std;
    #define  INITIALSIZE     10  // 线性表存储空间的分配量,即数组长度
    #define  Status int //定义返回状态
    #define  OK 1
    #define  error  0
    //#define LISTINCREMENT=10;
    typedef  struct {
        int  * elem; //定义数组
        int  length;   // 当前长度 ,线性表的元素个数,并不是数组长度
        int listsize; //数组的长度
    } SqList;  // 俗称 顺序表
    
    Status InitList(SqList *L);
    Status ListEmpty(SqList *L);
    int ListLength(SqList *L);
    int getElem(SqList *L,int i);//返回i的元素
    int locateElem(SqList *L,int e);//返元素的位置
    Status ListInsert(SqList *L,int i,int e);
    int ListDelete(SqList *L,int i);//删除第i个元素返回这个元素
    void Traverse(SqList *L);//遍历列表
    
    Status InitList(SqList * L){
        L->elem=(int *)malloc(sizeof(int)*INITIALSIZE);
        if (!L->elem){cout<<"分配失败"<<endl;exit(-1);}
        L->length=0;
        L->listsize=INITIALSIZE;
        return OK;
    }
    Status ListEmpty(SqList * L){
        if (L->length==0)return OK;
    }
    int ListLength(SqList * L){return L->length;}
    Status ListInsert(SqList * L,int i,int e){
        if (i<1||i>L->length+1){cout<<"赋值失败"<<endl;return error;}//如果输入的下表不足1,或者大于数组的长度,就返回错误
        if (L->length>=L->listsize){
            int * newbase=(int *)realloc(L->elem,sizeof(int)*((L->listsize<<2)+L->listsize));
            if (!newbase)return error;
            L->elem=newbase;
            L->listsize+=(L->listsize<<2);
        }
        int * q=&(L->elem[i-1]);//插入位置
        for(int * p=&(L->elem[L->length-1]);p>=q;--p)
            *(p+1)=*p;
            *q=e;
            ++L->length;
        return OK;
    }
    void Traverse(SqList * L){
        for (int i=0;i<L->length;++i){
            cout<<L->elem[i]<<" ";
        }
    }
    int getElem(SqList *L,int i){
        if (i<1||i>L->length)return error;
    return L->elem[i];
    }
    int locateElem(SqList *L,int e){
    //  int *p = L;
    //  for (int * q=L->elem[L->length-1];q>p;++q){
    //      if (*q==e)return
    //  }
        for (int i=0;i<L->length;i++){
            if (L->elem[i]==e)return i;
        }
        return -1;
    }
    int ListDelete(SqList *L,int i){
        if (i<1||i>L->length+1){cout<<"树枝不对"<<endl;return error;}
        //删除的位置 删除之后依次前移
        for (int * q=&(L->elem[i+1]);q<&(L->elem[L->length-1]);q++){
            *(q-1)=*q;
        }
        --L->length;
        return OK;
    }
    int main(){
    SqList mm;
    if (InitList(&mm)){
        for (int i=1;i<=30;i++){
            ListInsert(&mm,i,i);
        }
        Traverse(&mm);
        ListDelete(&mm,2);
        cout<<endl<<"删除之后"<<mm.length<<endl;
        Traverse(&mm);
        cout<<endl<<mm.elem[2]<<endl;
        cout<<locateElem(&mm,12);
    };
        return 0;
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Leetcode 18. 4Sum
    Leetcode 15. 3Sum
    Leetcode 16. 3Sum Closest
    String类型的理解
    求字符串中某个字符出现的次数
    用StringBuilder来实现经典的反转问题
    String/StringBuilder 类 用对象数组实现登录注册功能
    String/StringBuilder 类 统计字符串中字符出现的次数
    String/StringBuilder 类 判断QQ号码
    C++ 面向对象: I/O对象的应用
  • 原文地址:https://www.cnblogs.com/mrcharles/p/4731729.html
Copyright © 2011-2022 走看看