线性表链式存储的C语言实现(含源码)

本文将我学习链表的过程加以总结,将遇到的问题进行记录汇总,便于今后复习

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
typedef int status; 
typedef int elemtype;

//创建链表 
struct node
{
    elemtype data;
    struct node *next;
}node;
typedef struct node* linklist; 

//初始化链表
status initlink(linklist *l)
{
    (*l)=(linklist)malloc(sizeof(node));//(linklist)将泛型指针转换为指向节点的指针
    if(!(*l))
    return ERROR;//分配内存时,一定要检查是否成功分配,否则容易超内存
    (*l)->next=NULL;//头节点
    return OK; 
}

//访问链表中的元素
status visit(elemtype c)
{
    printf("%d ",c);
    return OK;
}

 // 返回l中元素个数
status listlength(linklist *l)
{
    int count;
    linklist p=(*l)->next;
    while(p)
    {
        count++;
        p=p->next;
    }
    return count;
} 

//判断是否为空
status listempty(linklist *l)
{
    linklist p=(*l)->next;
    if(!p)
    return TRUE;
    else
    return FALSE;
} 

 //清空l
status clearlist(linklist *l)
{
     linklist p=(*l)->next,q;
     while(p)
     {
        q=p->next;//q先记录p的后继节点,否则直接free(p)链表的后继节点将全部丢失
        free(p);
        p=q;//最后将后继节点赋值给p,循环往复直到表尾
     } 
      (*l)->next=NULL;//最后记得将头节点置空
} 

//用k返回链表第i个元素的值
status getelem(linklist l,int i,elemtype k)
{
    int j=1;
    linklist p=l->next;
    while(p&&j<i)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i)
    return ERROR;
    k=p->data;
    return k;
} 

//返回第一个值为k的元素的位序
status locateelem(linklist l,elemtype k)
{
    linklist p=l->next;
    int i=1;
    while(p)
    {
        if(p->data==k)
        return i;
        i++;
        p=p->next; 
    }
    if(!p)
    return ERROR;
}

 // 在链表的第i个位置插入元素k
status listinsert(linklist 
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值