《大话数据结构》笔记【1】

程序设计=数据结构+算法

数据概念

  • 数据
  • 数据元素:基本单位
  • 数据项:最小单位。组合成为数据元素
  • 数据对象:数据元素的集合
  • 数据结构:相互之间存在一种或多种特定关系的元素元素的集合;
    存在:逻辑结构和物理结构
    逻辑结构:集合,线性,树,图
    物理:顺序,链

线性表

操作:

  • InitList(*L) ;建立空表L
  • ListEmpty(L) ; Bool类型;判断空
  • ClearList(*L) ; 清空表
  • GetElem(L,i,*e) ; 第i位置赋值e
  • LocateElem(L,e) ; 查找与e相同的序号。否则0
  • ListInsert(*L,i,e) ; 第i插入e
  • ListDelete(L,i,e) ; 删除i位置,返回e;
  • ListLength(L) ; 表个数

顺序存储

#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
    ElemType data[MAXSIZE];
    int length;  // 线性表当前长度;
}SqList;

获得元素:

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

插入:

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

删除:

Status ListDelete(SqList *L,int i,ElemType *e)
{
    int k;
    if(L->length == 0)
        return ERROR;
    if(i<1||i>L->length)
        return ERROR;
    *e = L->data[i-1];
    if(ilength)
    {
        for(k=i;k<=L->length;k++)
            L->data[k-1]=L->data[k];
    }
    L->length--;
    return OK;
}

链存储

《大话数据结构》笔记【1】_第1张图片
image.png

typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node;

typedef struct Node *LinkList;

读取:

Status GetElem(SqList L,int i,ElemType *e)
{
    int j;
    LinkList p;
    p = L->next;
    j=1;
    while(p&&jnext;
        ++j;
    }
    if(!p||j>i)
        return ERROR;
    *e = p->data;
    return OK;
}

插入:

Status ListInsert(LinkList *L,int i,ElemType e)
{
    int j;
    LinkList p,s;
    p = *L;
    j=1;
    while(p&&jnext;
        ++j;
    }
    if(!p||j>i)
        return ERROR;
    s = (LinkList)malloc(sizeof(Node));
    s->data = e;
    s->next = p->next;
    p->next = s;
    return OK;
}

删除:

Status ListDelete(LinkList *L,int i,ElemType *e)
{
    int j;
    LinkList p,q;
    p = *L;
    j=1;
    while(p->next && jnext;
        ++j;
    }
    if(!(p->next) && j>i)
        return ERROR;
    q = p->next;
    p->next = q->next;
    *e = q->data;
    free(q);
    return Ok;
}

你可能感兴趣的:(《大话数据结构》笔记【1】)