博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表的基本使用
阅读量:4514 次
发布时间:2019-06-08

本文共 1974 字,大约阅读时间需要 6 分钟。

前言

链表有些时候还是很好用的(我也不知道啥时候),正好有时间稳固一下基本知识。

定义:

链表的基本格式是一个结构体,结构体内部有数据成员和结构体指针,结构体指针用于指向下一个节点的地址,数据成员用于存储数据,结构如下:

typedef struct node {    int data;    struct node *next;}Node;

创建:

创建链表即将一个个的节点串连起来,即一个节点的指针指向下个节点地址。

创建时需要定义三个结构体指针,一个是链表的指针,一个是头节点指针(标志),用来进行链表的访问 ,还需要有一个临时的节点指

针,不能直接在原链表上直接进行创建,因为创建的指针不赋为空会指向非法地址,即野指针,具体操作:

Node *CreateList() {    Node *L, *head, *tmp;    int num;    L = (Node *)malloc(sizeof(Node));    L -> next = NULL;    head = L;    while(scanf("%d", &num) && num) {        tmp = (Node *)malloc(sizeof(Node) );        tmp -> data = num;        tmp -> next = NULL;        L -> next = tmp;        L = tmp;    }    return head;}

读取:

对原链表进行读取操作,通过上一步的创建函数可以得到一个链表的头节点地址,这个头节点并没有任何信息,只存储了第一个节点的地址,所以我们需要从头节点的下一个

节点进行读取信息。

代码:

void ReadList(Node *head) {    head = head -> next;    while(head != NULL) {        printf("%d\n",head -> data);        head = head -> next;    }}

大功告成!

这时你应该对链表有了一个初步认识

附完整代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mem(arr,num) memset(arr,0,sizeof(arr))#define _for(i, a, b) for(int i = a; i <= b; i++)#define __for(i, a, b) for(int i = a; i >=b; i--)#define IO ios::sync_with_stdio(false);\ cin.tie(0);\ cout.tie(0);using namespace std;typedef long long ll;typedef vector
vi;typedef struct node { int data; struct node *next;}Node;Node *CreateList() { Node *L, *head, *tmp; int num; L = (Node *)malloc(sizeof(Node)); L -> next = NULL; head = L; while(scanf("%d", &num) && num) { tmp = (Node *)malloc(sizeof(Node) ); tmp -> data = num; tmp -> next = NULL; L -> next = tmp; L = tmp; } return head;}void ReadList(Node *head) { head = head -> next; while(head != NULL) { printf("%d\n",head -> data); head = head -> next; }}int main() { Node *head = CreateList(); ReadList(head); return 0;}

 

转载于:https://www.cnblogs.com/GHzz/p/9196891.html

你可能感兴趣的文章
关于图片上传的实例
查看>>
JS HTML DOM 事件对象(onclick、onmouseenter)
查看>>
sqlserver复制表
查看>>
wsdl.exe的用法与参数说明
查看>>
第一次作业:深入源码分析进程模型
查看>>
彻底理解ThreadLocal
查看>>
[Intermediate Algorithm] - Spinal Tap Case
查看>>
场景设计方法
查看>>
python2x与python3x的区别
查看>>
SQL SERVER 自定义函数
查看>>
洛谷P1031 均分纸牌
查看>>
高性能NIO通信框架之Netty入门(二)-----TCP粘包/拆包
查看>>
FreeMarker初探--安装FreeMarker
查看>>
Eclipse git pull 报Nothing to fetch 异常原因
查看>>
Java中封装类型.valueOf()
查看>>
精品资源:40个实用的 PSD 贴纸模板《下篇》
查看>>
【面试题】BD
查看>>
【面试】链表反转
查看>>
素数距离问题_ny_24.java
查看>>
总结A*,Dijkstra,广度优先搜索,深度优先搜索的复杂度比较
查看>>