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;
    }
    
  • 相关阅读:
    如何删除Windows的服务
    在使用ORACLE时常用到的命令和脚本
    windows 查看端口使用情况
    jQuery获取及设置单选框,多选框,文本框内容
    disabled="disabled" readonly="readonly" type="hidden"提交表单的区别
    @Column标记持久化详细说明
    jQuery核心及其工具
    Hibernate JPA注解说明
    php要点
    jQuery中的动画与效果
  • 原文地址:https://www.cnblogs.com/mrcharles/p/11879915.html
Copyright © 2011-2022 走看看