预备役第二周总结

回顾本周,最重要是是学习链表的建立。

1.链表的核心结构:

typedef struct jiedian
{
    int a;
    struct link *next;
}lianbiao;
lianbiao *r,*p,*head;

2.链表数据的录入:

首先要申请相同类信的变量指针,同时要对头节点进行初始化(head->next==NULL)。

r=(lianbiao*)malloc(sizeof(lianbiao));

scanf("%d",&r->next);

然后根据新链表的插入位置来选择是头插还是尾插;

头插:r->next=head->next;      head->next=r;

尾插:p=head; p->next=r;    p=p->next;

3.链表数据的输出”

p = head->next;
    while (p != NULL) {
        Node* q = NULL;
        q = p;
        printf("%d ", p->data);
        p = p->next;//p变成了p->next
        free(q);
    }
    free(head);

其中,q是用于链表的移动。

上代码:

1.头插法:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//创建一个节点类型
typedef struct jiedian {//typedef的意思是
    int data;
    struct jiedian* next;//因为我下一个节点的类型是struct node类型,所以next是struct node*类型;
}Node;

Node* head, * p, * r;//头结点是用来找到这个链表的,不能动。
int n; 
//创建链表
void create_Linklist() {
    head = (Node*)malloc(sizeof(Node));//我要一个Node大小的内存。存的是Node*类型的东西
    head->next = NULL;//初始化指针变量
    for (int i = 0; i < n; i++) {
        r = (Node*)malloc(sizeof(Node));//来了个新节点
        scanf("%d", &r->data);
        r->next = head->next;//让新节点的next指向(原来接在头结点后面的结点)
        head->next = r;//让新节点接在头结点后
    }
}

int main()
{
    scanf("%d", &n);
    create_Linklist();
    //头结点永远不要动
    p = head->next;//把head下一个节点赋值给p,p代替头结点遍历整个链表
    while (p != NULL) {
        Node* q = NULL;
        q = p;
        printf("%d ", p->data);
        p = p->next;//p变成了p->next
        free(q);
    }
    free(head);
    return 0;
}

2.尾插法:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//创建一个节点类型
typedef struct jiedian {//typedef的意思是
    int data;
    struct jiedian* next;//因为我下一个节点的类型是struct node类型,所以next是struct node*类型;
}Node;

Node* head, * p, * r;//头结点是用来找到这个链表的,不能动。
int n;
//创建链表
void create_Linklist() {
    head = (Node*)malloc(sizeof(Node));//我要一个Node大小的内存。存的是Node*类型的东西
    head->next = NULL;//初始化指针变量
    p = head;//把head赋值给p,p代替头结点遍历整个链表
    for (int i = 0; i < n; i++) {
        r = (Node*)malloc(sizeof(Node));//来了一个新结点
        r->next = NULL;//初始化
        scanf("%d", &r->data);
        p->next = r;
        p = p->next;//移动p
    }
}

int main()
{
    scanf("%d", &n);
    create_Linklist();
    //头结点永远不要动
    p = head->next;
    while (p != NULL) {
        Node* q = NULL;
        q = p;
        printf("%d ", p->data);
        p = p->next;//p变成了p->next
        free(q);
    }
    free(head);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值