Re:从零开始的算法学习【6】链表(1)

链表是一种线性表,链表的物理储存结构是用一组地址任意的存储单元存储数据的(将存储单元分散在内存的任意地址上)。在链表结构中,每个数据元素记录都存放到链表的一个结点(node)中,每个结点由指针连接。

链表的每个结点可以是一个结构体类型元素,也可是其他构造类型元素。在链表的每个结点中,有一个存放地址(指针)的域。一条链表通常有一个指针变量作为“表头”,用来存放第一个结点地址;最后一个结点指向“NULL"作为尾结点。


逻辑连续,但物理上并不一定连续。


链表的建立

#include"stdio.h" 
#include"stdlib.h"

/*
	创建结点
*/
typedef int ElemType;
typedef struct node{
	ElemType data;
	struct node *next;
}LNode,*LinkList;		//将struct node 定义为LNode类型,即每个结点类型为LNode 

LinkList GreatLinkList(int n ){		//建立一个长度为n的链表 
	LinkList p,r,list = NULL;	
	ElemType e;
	int i ;
	for(i = 1; i <= n; i++){
		scanf("%d",&e);			//输入每个结点的内容 
		p = (LinkList)malloc(sizeof(LNode));	//动态内存分配一块大小为LNode的空间,并将其地址赋给 p 
		p->data = e;	//数据e被存入结点数据域data 
		p->next = NULL;		//指针域存放NULL 
		if(!list)	//判断list是否为空,若为空,则说明本次生成的结点为第一个结点 
			list = p;	//将p赋值给list 
		else
			r->next = p;		//?????	
		r = p;
	} 
	return list;	//list为头指针,指向第一个链表结点,所以返回list 
} 

int main()
{
	int e,i;
	LinkList l,q;
	q = GreatLinkList(3);
	while(q)
	{
		printf("%d ",q->data);
		q = q->next;
	}
 } 
(有点不理解r ->next = p 这一块)

猜你喜欢

转载自blog.csdn.net/vincemar/article/details/80284031
今日推荐