4链表
Posted zh-xiaoyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4链表相关的知识,希望对你有一定的参考价值。
1、数组与链表
我们至少可以通过两种结构来存储数据
数组
优点:
存取速度快
缺点:
需要一个连续的很大的内存
插入和删除元素的效率很低
链表
专业术语:
首节点
存放第一个有效数据的节点
尾节点
存放最后一个有效数据的节点
头结点
头结点的数据类型和首节点的类型是一摸一样的
头结点是首节点前面的那个节点
头结点并不存放有效数据
设置头结点的目的是为了方便对链表的操作
头指针
存放头结点地址的指针变量
确定一个链表需要一个参数:头指针
优点:
插入删除元素效率高
不需要一个连续的很大的内存
缺点:
查找某个位置的元素效率低
/*---------------------------------------- 建立一个链表并输出其中的值 ----------------------------------------- 链表是动态创建的 -----------------------------------------*/ # include <stdio.h> # include <malloc.h> # include <stdlib.h> struct Node { int data; //数据域 struct Node * pNext; //指针域 }; //函数声明 struct Node * create_list(void); void traverse_list(struct Node *); int main(void) { struct Node * pHead = NULL; //等价于 struct Node * pHead = NULL; pHead = create_list(); //create_list()功能:创建一个非循环单链表,并将该链表的头结点的地址付给pHead traverse_list(pHead); //只需要发送头指针就能输出链表 return 0; } struct Node * create_list(void) { int len; //用来存放有效节点的个数 int i; int val; //用来临时存放用户输入的结点的值 //分配了一个不存放有效数据的头结点 struct Node * pHead = (struct Node *)malloc(sizeof(struct Node)); if (NULL == pHead) { printf("分配失败, 程序终止! "); exit(-1); } struct Node * pTail = pHead; pTail->pNext = NULL; printf("请输入您需要生成的链表节点的个数: len = "); scanf("%d", &len); for (i=0; i<len; ++i) { printf("请输入第%d个节点的值: ", i+1); scanf("%d", &val); struct Node * pNew = (struct Node *)malloc(sizeof(struct Node)); if (NULL == pNew) { printf("分配失败, 程序终止! "); exit(-1); //终止程序 } pNew->data = val; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } return pHead; } void traverse_list(struct Node * pHead) { struct Node * p = pHead->pNext; while (NULL != p) { printf("%d ", p->data); p = p->pNext; } printf(" "); return; } /*----------------------------------------------------------------- 打印结果: 请输入您需要生成的链表节点的个数: len = 5 请输入第1个节点的值: 10 请输入第2个节点的值: 12 请输入第3个节点的值: 14 请输入第4个节点的值: 16 请输入第5个节点的值: 18 10 12 14 16 18 Press any key to continue -----------------------------------------------------------------*/
以上是关于4链表的主要内容,如果未能解决你的问题,请参考以下文章
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段