入门:链表的基本操作

入门:链表的基本操作

标签:C语言 链表

By 小威威


1.写这篇博文的原因

C语言有三大重要部分:流程控制、函数、指针。
对于指针,单单了解它的简单应用是不够的,最重要的还是学习链表。许多参考书对链表的基本操作的概括还是不大完整的,所以在此通过这篇博文介绍链表的几种常用操作,以帮助初学者入门链表。

2.链表的基本操作主要有哪一些

1)链表的建立;
2)链表的输出;
3)链表结点的插入;
4)链表结点的删除;
5)链表各结点指向的倒置;
6)链表的粉碎。
补充:入门基本操作以后,可以进行其他操作:如各种类型的排序,这里就不介绍了,在以后的博文可能会介绍。

3.链表基本操作的完整代码

# include <stdio.h>
# include <stdlib.h>
struct student {  //  用结构体定义链表的结点
    int num;    //  学号
    float score;  //  分数
    struct student *next;  //  存储的是指向下一个结构体的地址
};
struct student *establish(void);  //  建立链表的函数的声明
struct student *lessen(struct student *head, int num);  //  删除结点的函数的声明
struct student *insert(struct student *head, int num, struct student *node);  //  插入结点的函数的声明
struct student *reserve(struct student *head);  //  链表指向倒置的函数的声明
void output(struct student *head);  //  输出链表的函数的声明
void deletelist(struct student *head);  //  粉碎链表的函数的声明
int n;  // 定义全局变量,表示链表中结点的个数
int main(void) {
    struct student *head;  // 定义链表的头指针
    int num, num2;  // num表示要删去的结点
    head = establish();  // 调用建立链表的函数
    output(head);  //  调用输出链表的函数
    printf("请输入你要删除的结点:\n");
    scanf("%d", &num);
    head = lessen(head, num);  //  调用删除结点的函数
    output(head);  //  调用输出链表的函数
    struct student *node = malloc(sizeof(struct student));  // 定义一个新的结点,并为他开辟一个空间
    printf("请输入需要插入新结点的数据:\n");
    scanf("%d%f", &node->num, &node->score);  // 给该新结点赋值
    printf("请输入要插入的位置(哪个结点之后):\n");
    scanf("%d", &num2);  // 输入要插入的位置
    head = insert(head, num2, node);  // 调用插入结点的函数
    output(head);  // 调用输出的函数
    printf("现在对该链表的指向进行倒置\n");
    head = reserve(head);  // 调用链表指向倒置的函数
    output(head);  // 调用输出链表的函数
    deletelist(head);  //  调用粉碎链表的函数
    return 0;
}

struct student *establish(void) {  // 定义建立链表的函数
    struct student *p1, *p2, *head;  // 定义三个指针变量,p1、p2可以对相邻结点进行操作,head为头指针
    n = 0;  //  给n初始化,即结点为0
    p1 = p2 = malloc(sizeof(struct student));  // 给两个指针变量分配动态内存
    head = NULL;  // 一定要将头指针置空。(如果没有初始化,一旦没有执行循环,该函数就会直接返回没有初始化的头指针,即没用的头
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值