单链表的基本操作

2022-05-10 21:42:14 浏览数 (1)

单链表的基本操作

首先预定义链表结构和结点

代码语言:javascript复制
typedef struct Node{
    ElemType data;
    struct Node *next;
}Node;

typedef struct Node *LinkList;      /*定义LinkList*/

接下来贴几个基本操作

代码语言:javascript复制
/*初始条件:顺序线性表L 不存在*/
/*操作结果:建立一个头结点*/
Node *LinkListInit(){
    Node *p;
    p = (Node *)malloc(sizeof(Node));   /*建立一个大小与Node结点大小相同的结点*/

    if(!p){
        printf("分配空间失败!");
    }

    p->next = NULL;
    return p;
}

/*初始条件:顺序链表L 已存在*/
/*操作结果:在链表L 中填入元素*/
Node *LinkListCreat(){
    Node *q, *p, *L;

    p = (Node *)malloc(sizeof(Node));
    L = (Node *)malloc(sizeof(Node));       //建立一个头结点

    //开始建立新的链表的后续项目
    q = (Node *)malloc(sizeof(Node));
    printf("请输入该链表的元素(0表示结束):");
    scanf("%d", &q->data);
    int m = q->data;
    while(m != 0){          // 判断输入是否为0
        p->next = q;
        p = q;
        q = (Node *)malloc(sizeof(Node)); 
        printf("请输入该链表的元素(0表示结束):");
        scanf("%d", &m);
        q->data = m;
    }
}

/*初始条件:顺序线性表L 已存在,1 <= i <= ListLength(L)*/
/*操作结果:用e 返回L 中第i 个数据元素的值*/
Status GetElem(LinkList L, int i, ElemType *e){
    int j;
    LinkList p;         /*声明一指针p*/
    p = L->next;        /*让p 指向链表L的第一个结点*/
    j = 1;              /*j 为计数器*/

    while(p && j < i){  /*p 不为空 且计数器j还没有等于i 时,循环继续*/
        p = p->next;    /*让p 指向下一个结点*/
        j  ;
    }

    if(!p || j > i){    /*当第i 个结点不存在时*/
        return ERROR;
    }

    * e = p->data;      /*取第i 个结点的数据*/
    return Ok;
}

0 人点赞