代码,用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;
}

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

原文地址:https://www.cnblogs.com/mrcharles/p/4731729.html