数据结构之链表学习(1)
来源:互联网 发布:广州网络优化 编辑:程序博客网 时间:2024/06/05 10:30
(1) 链表包括:数据域和指针域
因此在用结构体定义链表的代码为
typedef struct node
{
int data;//数据域
struct node *pnext;//指针域
}Node, *pNode;
(2) 创建链表
1. 介绍一个函数malloc,此函数的作用是在内存的动态存储区中分配一块连续的空间。其原型为:void *malloc(unsigned intsize);如果此函数因某些原因(内存不足)未能执行成功,则会返回一个空指针(NULL)。
2. 在创建链表的过程中的一个难点是:怎样将多个节点连接起来。即用代码怎样实现。在函数中我定义了三个变量Head,p1,p2.Head 的作用是记录头节点的地址。p1的作用是用来暂存后面申请到的节点的地址。p2的作用是用来把各个节点联系起来。通过p2这个中介,可以把刚申请到的节点连接到已经生成的链表的后面。
(3) 链表的遍历
在链表遍历的过程中遇到的几个问题:
1、到底使用for循环还是用while循环输出值得问题。经过不断的改进觉得这种方式比较不错
while(1)
{
if(p1->pnext == NULL)
{
printf("%d ",p1->data);
break;
}
printf("%d ",p1->data);
p1 = p1->pnext;
}
首先检测p1->pnext是否等于NULL,如果是,则输出该节点的数据。其实这个if判断主要是用来输出链表中的最后面的一个数据。因为在这之前输出的数据中总是缺少最后一个数据。如果p1->pnext !=NULL,则输出该节点的值,同时将p1指向下一个节点的地址,以便读取下一个节点的数据。
2、还遇到一个问题是:遍历之后再第一个数据的前面出现莫名其妙的数据
其实出现这个问题的主要原因是:在申请头结点Head的时候,并没有给它的数据域赋值。但在遍历的时候就是从这个节点开始遍历的。刚开始将p1 = Head,其实这个应该改为p1 = Head->next.
3、当输入测试数据‘0’时,然后就会出现错误,原因是在申请了Head头结点后忘记了个它的pnext置为空指针的原因。
代码如下:
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct node{ int data;//数据域 struct node *pnext;//指针域}Node, *pNode;/**创建链表**/pNode Create_node(void){ pNode Head, p1, p2; int val,num,i; Head = (pNode)malloc(sizeof(Node));//p=(struct node *)malloc(sizeof(struct node))
Head->pnext == NULL; if(Head == NULL) { printf("内存分配失败,程序终止"); exit(-1); } ////////////////////////////////////////////////// p2 = Head; printf("请输入创建节点的个数:"); scanf("%d",&num); for(i = 0; i < num; i ++) { printf("请输入节点的值:"); scanf("%d",&val); p1 = (pNode) malloc(sizeof(Node)); p1->pnext = NULL; p1->data = val; p2->pnext = p1; p2 = p1; } return Head;}/**遍历链表**/void traverse_list(pNode Head){ pNode p1; p1 = Head->pnext;//注意此处不是p1 = Head,而是p1 = Head->pnext printf("遍历后输出的值为:"); while(1) { if(p1->pnext == NULL) { printf("%d ",p1->data); break; } printf("%d ",p1->data); p1 = p1->pnext; }}int main(void){ pNode pHead; pHead = Create_node(); traverse_list(pHead); return 0;}
- 数据结构之链表学习(1)
- 数据结构之链表学习(2)
- 数据结构之链表学习
- 学习数据结构之链表
- 数据结构学习之链表
- 数据结构学习之链表
- 数据结构学习笔记之链表(C语言版)
- 数据结构学习之双向链表
- 数据结构学习之链表小结
- 数据结构与算法学习之链表
- 数据结构学习之单向链表结构
- 数据结构学习之双向链表结构
- 数据结构学习之循环链表结构
- 数据结构学习之链表代码
- 数据结构之链表学习笔记
- 学习java数据结构基础知识之链表
- 数据结构学习之双向链表结构
- 菜鸟学习数据结构之链表
- node.js对mongodb的增删查改
- C++ 函数指针的用法
- 菜鸟必备——windows常用快捷键
- 在servlet中生成验证码图片(二)
- 小议素数序列求法以及使用
- 数据结构之链表学习(1)
- 设计模式7——结构型模式之适配器模式
- iOS中相册的学习记录
- Delphi中拖动无边框窗口的5种方法
- IO之File类
- node.js--闪出消息
- node.js--验证输入的数据
- B*树索引——Oracle的默认索引结构
- 虚函数的一些特性