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;
    }
    

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

  • 相关阅读:
    Fidder4 顶部提示 “The system proxy was changed,click to reenable fiddler capture”。
    redis 哨兵 sentinel master slave 连接建立过程
    虚拟点赞浏览功能的大数据量测试
    python基础练习题(题目 字母识词)
    python基础练习题(题目 回文数)
    python基础练习题(题目 递归求等差数列)
    python基础练习题(题目 递归输出)
    python基础练习题(题目 递归求阶乘)
    python基础练习题(题目 阶乘求和)
    python基础练习题(题目 斐波那契数列II)
  • 原文地址:https://www.cnblogs.com/mrcharles/p/4731729.html
Copyright © 2011-2022 走看看