其他分享
首页 > 其他分享> > C语言链表实现(郝斌数链表学习笔记)

C语言链表实现(郝斌数链表学习笔记)

作者:互联网

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
	int data ;//数据域

	struct Node * pNext; //指针域  这个指针域它指向的是跟它本身一样的数据类型的另一个节点 

}NODE,*PNODE; //NODE等价于struct Node		PNODE等价于struct Node*

PNODE create_list(void);

void traverse_list(PNODE pHead);

bool is_empty(PNODE pHead);

int length_list(PNODE);

bool insert_list(PNODE,int,int);

bool delete_list(PNODE,int ,int*);
//动态分配的内存

int main(int argc, char* argv[])
{
	PNODE pHead = NULL; //等价于struct Node * pHead = Null  头节点

	pHead = create_list();//create_list():创建一个非循环单链表,并将该链表的头节点的地址赋给pHead

	traverse_list(pHead);

	system("pause");

	return 0;
}

PNODE create_list(void)//返回类型为地址  PNODE = struct Node*
{
	int len;//用来存放有效结点的个数

	int i; 

	int val;//用来临时存放用户输入的结点的值

	//分配了一个不存放有效数据的头节点,不能叫头指针
	PNODE pHead = (PNODE)malloc(sizeof(NODE));//分配头节点的首地址给了pHead  PNODE = struct Node*
	if (NULL==pHead)
	{
		printf("分配失败,程序失败!");
		exit(-1);
	}
	PNODE pTail = pHead; //尾结点 初始化

	pTail->pNext = NULL; //用来清空尾结点的指针域

	printf("请输入您需要生成的链表节点的个数:len = \n");

	scanf("%d",&len);

	for( i = 0; i<len;++i)
	{
		printf("请输入第%d个节点的值",i+1);

		scanf("%d",&val);

		PNODE pNew = (PNODE)malloc(sizeof(NODE));//	PNODE等价于struct Node*

		if(NULL==pNew)
		{
		
			printf("分配失败,程序终止");
		}
		pNew->data =val;// 将变量值赋值到结点的数据域当中

		pTail->pNext = pNew; //将新的结点挂到尾结点

		pNew->pNext = NULL;

		pTail = pNew;

	}
	return pHead;
}
void traverse_list(PNODE pHead)
{ //链表不能用数组来遍历
	PNODE p = pHead->pNext; //p指向第一个有效结点

	while (NULL!=p)
	{
		printf("%d ",p->data);

		p = p->pNext;

	}
	printf("\n");
	return ;
	 
}

标签:郝斌数,struct,int,list,结点,C语言,链表,PNODE,pHead
来源: https://www.cnblogs.com/doubleconquer/p/15512703.html