数据结构与算法分析--线性表

在读研开始,需要了解一些数据结构方面的知识,就自己努力的敲代码啊。。。

在补习过程中,看了两位大神的著作:程杰的《大话数据结构》、解学武老师的网页文章。感觉很受用,再次表示感谢。

直接开始线性表:线性表、单链表、双链表、循环链表、静态链表。

线性表存储方式

//循环集合B中的每个元素,判断当前元素是否在A中,若不存在,则插入到A中
void union(List *La,List *Lb){
    int La_len,Lb_len,i; 
    ElemType e; /*声明La和Lb相同的数据元素e*/
    La_len=ListLength(La);    /*求线性表的长度*/
    Lb_len=LiatLength(Lb);
    for(i=0;i

线性表的数据就结构实现:

#define MAXSIZE 20     /*存储空间初试分配量*/
typedef int ElemType;    /*ElemType类型根据实际情况而定,假设int */
typedef struct{
    ElemType data[MAXSIZE];    /*数组存储数据元素,最大值MAXSIZE*/
    int length;    /*线性表当前长度*/
}Sqliat;

顺序存储结构的操作:

获得元素的实现:

/*初始条件:顺序表L已经存在
实现结果:用e返回L中第i个数据元素的值*/
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
/*Status是函数的类型,其值是函数结果的状态码*/

Status GetElem(SqList L,int i,ElemType *e){
    if(L.length==0||i<1||i>L.length)
        return ERROR;
    *e=data[i-1];
    retrurn OK;
}

插入操作实现:

/*初始条件:顺序表已经存在,
操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加一*/
Status ListInsert(SqList *L,int i,ElemType e){
    int k;
    if(L->length==MAXSIZE)//表满
        return ERROR;
    if(i<1||i>L->length-1) //当i不在范围内
        return ERROR;
    if(i<=L->length) //若插入数据不在表尾
    {
        for(k=L->length-1;k>=i-1;k--)//将要插入位置后数据元素向后移动一位
            L->data[k+1]=L->data[k];
    }
    L->data[i-1]=e;    /*将新元素插入*/
    L->length++;    
    return OK;
    
}

删除数据的实现:

/*初始条件:顺序线性表已经存在
操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减一*/

Status ListDelete(SqList *L,int i,ElemType *e){
    int k;
    if(L->length==0) //线性表为空
        return ERROR;
    if(i<1||i>length)//删除位置不正确
        return ERROR;
    *e=L->data[i-1];
    if(ilength){    //删除位置不是最后位置
        for(k=i;klength;k++)
            L->data[k-1]=L->data[k];
    }
    L->length--;
    return OK;
}

单链表存储方式

 

循环链表存储方式

 

静态链表存存储方式

 

双链表存储方式

实践例子

你可能感兴趣的:(C/C++)