C语言基础(九)- 链表
来源:互联网 发布:电脑硬盘加密软件 编辑:程序博客网 时间:2024/05/21 03:20
数组和链表的比较
数组
优点:
- 存取速度快,并且每个元素有标号,方便找到
缺点:
- 只能够连续存储,如果需要存数的信息量特别大,可能就会定义数组失败!
- 当删除数据或增加数据时,数组也不能够做到自动做到将分配空间迁移。
链表
优点:
- 每个结点包括存储的数据和指针两部分,插入和删除元素效率高,且它的元素之间可以不连续
缺点:
- 没有编号,所以找到某个位置的链表的元素效率低,只能一个个挨个的找
相关术语:
- 首结点:存放第一个有效数据的结点;
- 尾结点:存放最后一个有效数据的结点;
- 头结点:首结点前面的那个结点,头结点和首结点的数据类型是一摸一样的,设置头结点的目的是方便对链表的操作;
- 头指针:存放头结点地址的指针变量;
[注]:确定一个链表只需要头指针一个参数即可。
单向动态链表示例:
/*** 单向动态链表测试*/# include <stdio.h># include <string.h># include <mm_malloc.h>struct Student { char name[10]; //链表数据 float score; struct Student * pNext; //指针数据};int main() { int len; struct Student * create_stu_list(int); void traverse_stu_list(struct Student *); printf("please input the num of stu: "); scanf(" %d", &len); //创建链表 struct Student *pHead = create_stu_list(len); //遍历链表 traverse_stu_list(pHead); return 0;}struct Student * create_stu_list(int len) { /* pHead是头指针 pre指针的作用是开辟动态存储空间 post指针的作用是创建各结点的链接 */ struct Student *pHead, *pre, *post; //首结点 pre = (struct Student *) malloc(sizeof(struct Student)); pHead = pre; post = pre; printf("please input the information of stu:\n"); printf("name="); scanf(" %s", pre->name); printf("score="); scanf(" %f", &pre->score); int i = 1; while (i<len) { //开辟新的内存空间 pre = (struct Student *) malloc(sizeof(struct Student)); //赋值 printf("name="); scanf(" %s", pre->name); printf("score="); scanf(" %f", &pre->score); //勾连 post->pNext = pre; post = pre; i++; } post->pNext = NULL; //最后的尾结点指针不指向任何结点 return pHead;}void traverse_stu_list(struct Student *pHead) { struct Student *p; printf("[while] the student info is as follows: \n"); p = pHead; while (p!=NULL) { printf("%-15s %-5.1f\n", p->name, p->score); p = p->pNext; } printf("[for] the student info is as follows: \n"); for (p=pHead; p!=NULL; p=p->pNext) { printf("%-15s %-5.1f\n", p->name, p->score); }}
0 0
- C语言基础(九)- 链表
- C语言基础(九)结构体、补充typedef用法
- c语言基础(九)结构体指针
- 黑马程序员-C语言基础九:指针
- C语言库函数(九)
- 零基础学C语言 笔记九 字符串
- C语言学习笔记(九)--函数
- C语言入门教程 (九)多维数组
- C语言函数集(九)
- C语言程序学习(九)笔记
- C语言基础知识之(九):函数
- C语言开发总结(九)
- C语言中的一些关键字(九)
- Linux学习(九): C语言复习
- C语言(九):字符串
- JavaScript语言基础---(九)Array
- 黑马程序员-iOS基础-Objective-C基础(九)
- c语言基础回顾-链表
- _resultsMap
- 常用端口总结
- 在Ubuntu 14.04上用BIND配置一个私有网络DNS服务器
- 环信实现基本聊天功能
- 先验概率与后验概率与似然估计
- C语言基础(九)- 链表
- POj 1019 number sequence(数学)
- 安捷伦示波器的游戏
- redux介绍
- WebAPI GET和POST请求的几种方式
- 自定义NSLog宏输出
- C语言基础(十)- 预处理
- MySQL锁定状态查看命令
- mac终端Iterm2支持rz和sz的解决方案