您的位置:首页 > 其它

链表《1》链表的创建和遍历

2014-04-23 10:21 281 查看
链表是一种动态数据结构,它的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素,一个简单的链表如下图所示



链表中每一个元素称为结点,每一个结点都是由数据域和指针域组成的,每个结点的指针域指向下一个结点

非循环单链表的实现:

要实现非循环单链表首先应定义一个结点结构

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个结点的链表





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: