Skip to content

链表

约 150 个字 33 行代码 2 张图片 预计阅读时间 1 分钟

一、使用结构嵌套定单向列表节点

示例:

struct stud_node{
    int num;
    char name[20];
    int score;
    struct stud_node *next;
}
  • 结构的递归定义
  • next是一个结构指针,指向链表中的下一个节点

动态存储分配

struct stud_node *p; //声明指针变量p
p=(struct stud_node*)malloc(sizeof(struct stud_node)); 

第二行的意思

新申请到的空间首地址被强制类型转换成struct stud_node型指针,并保存到指针变量p中 若申请成功,p指向被分配的内存空间的起始地址

二、常用操作

2.1 按输入顺序建立单向链表

struct stud_node *Create_Stu_Doc(){
    int num, score; 
    char name[20]; //用来暂存输入量的一些变量
    int size = sizeof(struct stud_node);
    struct stud_node *head, *tail, *p; //头指针,尾指针,一般用来遍历的指针
    head=tail=NULL;
    printf("Input num, name and score:\n");
    scanf("%d%s%d",&num,name,&score);
    while(num!=0){
        p=(struct stud_node*)malloc(size);
        p->num=num;     
        strcpy(p->name,name);
        p->score=score;
        p->next-NULL;
        if(head==NULL) //头指针
            head=p;
        else
            tail->next=p;
        tail=p;
        scanf("%d%s%d",&num,name,&score);
    }
    return head;
}

2.2 链表的遍历

  • ptr=ptr->next

2.3 链表结点插入

alt text

2.4 链表结点删除

alt text

ptr1->next=ptr2->next;
free(ptr2);

Comments