单链表的基本操作

单链表的基本操作

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

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

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

接下来贴几个基本操作

/*初始条件:顺序线性表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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值