数据结构 - 单链表

1.用头指针head(头指针)标示一个单链表,单链表中L表示头结点的地址,头结点的指针域指向第一个结点,头结点的数据域无意义,可存储结点的数量。(链栈不需要头结点)
2.判断链表为空 :head ->next = NULL ;
3.指向头结点的尾结点,循环链表
4.单链表逆置,头插法
5.链表的尾插:定义指针,且指针总是指向链表末尾

6.单链表特点:

  1>逻辑关系相邻的元素在物理位置上可以不相邻
  2>表中的元素只能顺序访问而不能随机访问
  3>表的大小可以动态改变
  4>插入删除等操作只需要修改指针而无需移动元素。
#include <stdio.h>
#include <stdlib.h>
#define TURE  (1)
#define FALSE (0)

typedef unsigned char Boolean;
typedef struct List_node
{
    int   data;
    struct List_node* next;    //还不存在别名
}List_node;
//struct List_node 的别名为List_node
typedef List_node* List_head;


List_node * Malloc(int size)
{
    List_node *result = (List_head)malloc(size);
    if(result == NULL){
        printf("memery is full.\n");
        exit(1);
    }
    return result;
}


//链表初始化  定义头指针 产生头结点 并让头指针只想头结点
List_head init_list(void)
{
    List_head lhead = NULL;
    lhead = Malloc(sizeof(List_node));
    lhead->data = 0;
    lhead->next = NULL;
    return lhead;
}

// 链表的销毁 1.先销毁所有结点内容 free(结点地址)
//2.最后置空链表头指针*phead = NULL 故要传入头指针的地址phead
void disdory_list(List_head * phead)
{
    List_node *p = NULL;
    List_node *q = NULL;
    if(phead == NULL || *phead == NULL)
    {
         return;
    }
    p = *phead;  //p为头指针 头结点的地址

    while(p != NULL)
    {
        q = p;
        p = p->next;
        free(q);
    }

    *phead = NULL;
}

//链表的头插
Boolean push_front(List_head head,int value)
{
    List_node * node = NULL;

    if(head == NULL)
    {
        return FALSE;
    }

    node = Malloc(sizeof(List_node));
    node->data = value;

    node->next = head->next;
    head->next = node;
    head->data++;
    return TURE;
}

//链表的输出
void print_List(List_head head)
{
    // List_head p = head->next;
    // while( p != NULL){
   
    //   printf("%d ",p->data);
    // p = p->next;
    //}
    //注意区分 p = head->next 其中p为地址head对应结点的指针域,
    //为第二个结点的地址,
    //head->data,head->next  (p = head->next)  p->data,p->next
    List_node *p = NULL;

    for( p = head->next; p !=
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值