链表《1》链表的创建和遍历
2014-04-23 10:21
281 查看
链表是一种动态数据结构,它的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素,一个简单的链表如下图所示
链表中每一个元素称为结点,每一个结点都是由数据域和指针域组成的,每个结点的指针域指向下一个结点
非循环单链表的实现:
要实现非循环单链表首先应定义一个结点结构
定义两个函数用于实现链表的创建和遍历
链表创建算法:创建一个不存放有效数据的头结点pHead——定义一个永远指向尾结点的结点pTail——清空pTail的指针域——输入需要创建的结点的个数——输入第一个结点的数据域val——创建一个临时结点pNew——将输入的值赋给pNew的数据域(pNew->data=val)——将pNew挂到头结点后(pTail->pNext=pNew)——清空pNew(pNew->pNext=NULL)——将pTail移到pNew上(pTail=pNew)
重复后面几步直到创建完成
链表的创建代码:
链表遍历算法:定义一个结点p——p为头结点的指针域(p=pHead->pNext)——循环遍历结点,直到p为空退出循环
链表遍历实现代码:
程序代码:
测试程序:创建一个有5个结点的链表
链表中每一个元素称为结点,每一个结点都是由数据域和指针域组成的,每个结点的指针域指向下一个结点
非循环单链表的实现:
要实现非循环单链表首先应定义一个结点结构
typedef struct Node//结点结构 { int data;//数据域 struct Node *pNext;//指针域 }NODE, *PNODE;
定义两个函数用于实现链表的创建和遍历
//创建链表 PNODE Create_list(void);
//遍历链表 void Traverse_list(PNODE pHead);
链表创建算法:创建一个不存放有效数据的头结点pHead——定义一个永远指向尾结点的结点pTail——清空pTail的指针域——输入需要创建的结点的个数——输入第一个结点的数据域val——创建一个临时结点pNew——将输入的值赋给pNew的数据域(pNew->data=val)——将pNew挂到头结点后(pTail->pNext=pNew)——清空pNew(pNew->pNext=NULL)——将pTail移到pNew上(pTail=pNew)
重复后面几步直到创建完成
链表的创建代码:
//创建链表 PNODE Create_list(void) { int len;//结点的个数 int val;//临时保存结点的值 //分配一个不存放有效数据的头结点 PNODE pHead = (PNODE)malloc(sizeof(NODE)); if(NULL == pHead) { printf("内存分配失败,程序终止!"); exit(-1); } //定义一个永远指向尾结点的结点 PNODE pTail = pHead; pTail->pNext = NULL; printf("请输入您需要生成的链表的结点的个数:"); scanf("%d",&len); for(int i=0; i<len; i++) { printf("请输入第%d个结点的值:", i+1); scanf("%d",&val); //创建一个临时结点 PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL == pNew) { printf("内存分配失败,程序终止!"); exit(-1); } pNew->data = val; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } return pHead; }
链表遍历算法:定义一个结点p——p为头结点的指针域(p=pHead->pNext)——循环遍历结点,直到p为空退出循环
链表遍历实现代码:
//遍历链表 void Traverse_list(PNODE pHead) { PNODE p = pHead->pNext; while(NULL != p) { printf("%d ", p->data); p = p->pNext; } printf("\n"); return; }
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node//结点结构 { int data;//数据域 struct Node *pNext;//指针域 }NODE, *PNODE;
//创建链表 PNODE Create_list(void);
//遍历链表 void Traverse_list(PNODE pHead);
void main()
{
PNODE pHead = NULL;
pHead = Create_list();//创建一个非循环单链表
Traverse_list(pHead);//遍历链表
system("pause");
}
//创建链表 PNODE Create_list(void) { int len;//结点的个数 int val;//临时保存结点的值 //分配一个不存放有效数据的头结点 PNODE pHead = (PNODE)malloc(sizeof(NODE)); if(NULL == pHead) { printf("内存分配失败,程序终止!"); exit(-1); } //定义一个永远指向尾结点的结点 PNODE pTail = pHead; pTail->pNext = NULL; printf("请输入您需要生成的链表的结点的个数:"); scanf("%d",&len); for(int i=0; i<len; i++) { printf("请输入第%d个结点的值:", i+1); scanf("%d",&val); //创建一个临时结点 PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL == pNew) { printf("内存分配失败,程序终止!"); exit(-1); } pNew->data = val; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } return pHead; }
//遍历链表 void Traverse_list(PNODE pHead) { PNODE p = pHead->pNext; while(NULL != p) { printf("%d ", p->data); p = p->pNext; } printf("\n"); return; }
测试程序:创建一个有5个结点的链表
相关文章推荐
- 微信公众号开发地理位置坐标的转换
- 史蒂夫·乔布斯说过,每个人都应该学习给电脑编写程序的技术
- 长尾关键词如何优化呢?
- 谷歌力挺三星:败诉了我承担部分赔偿
- 1000know
- Linux Centos系统OpenCV安装方法
- 高斯消元
- STL 之 pair 源码剖析
- springMVC框架下JQuery传递并解析Json数据
- VB使用RES资源文件技巧
- iphone数据存储之-- Core Data的使用(一)
- 【Oracle 学习】Scott账号解锁
- thinkphp 内置函数详解
- IIS 和WAMP并存
- 把你送进世界500强企业的英文简历-应聘外企,一份高水准的简历必不可少。
- base.superclass.constructor.call(this,config)
- 数据库事务使用范例
- gcc参数详细介绍
- Leetcode全树类问题
- 状态模式