C语言指针链表

Python010

C语言指针链表,第1张

h是头结点,h->next指向链表的第一个结点。每当创建了一个新结点t时,先执行t->next=h->next令t->next指向链表现在的第一个结点;然后执行h->next=t令头结点h的next指针指向t,使t成为链表的新的第一个结点。创建的是带头结点的链表。

#include <stdlib.h> /*含ma l l o c ( ) 的头文件*/

#include <stdio.h>

 //①定义链表数据结构

struct node

{

int num

struct node *next

}

//函数声明

struct node *creat() 

void print()

main( )

{

struct node *head

head=NULL    //②建一个空表

head=creat(head)/*创建单链表*/

print(head)/*打印单链表*/

}

/******************************************/ 

struct node*creat(struct node *head)/*返回的是与节点相同类型的指针*/

{

struct node*p1,*p2

int i=1

//③利用malloc ( )函数向系统申请分配一个节点

p1=p2=(struct node*)malloc(sizeof(struct node))/*新节点*/

printf("请输入值,值小于等于0结束,值存放地址为:p1_ADDR= %d\n",p1)

scanf("%d",&p1->num)/*输入节点的值*/

p1->next=NULL/*将新节点的指针置为空*/

while(p1->num>0)/*输入节点的数值大于0*/

{

//④将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾 

if(head==NULL)

head=p1/*空表,接入表头*/

else 

p2->next=p1/*非空表,接到表尾*/

p2=p1

p1=(struct node*)malloc(sizeof(struct node))/*下一个新节点*/

i=i+1

printf("请输入值,值小于等于0结束,值存放地址为:p%d_ADDR= %d\n",i,p2)

scanf("%d",&p1->num)/*输入节点的值*/

//⑤判断一下是否有后续节点要接入链表,若有转到3 ),否则结束 

}

//==============原来程序更正部分:(多谢@daling_datou提醒)================================

free(p1)  //申请到的没录入,所以释放掉  

    p1=NULL   //使指向空  

    p2->next = NULL //到表尾了,指向空  

    printf("链表输入结束(END)\n")  

//==============================================

return head/*返回链表的头指针*/

}

/*******************************************/

void print(struct node*head)/*出以head为头的链表各节点的值*/

{

struct node *temp

temp=head/*取得链表的头指针*/

printf("\n\n\n链表存入的值为:\n")

while(temp!=NULL)/*只要是非空表*/

{

printf("%6d\n",temp->num)/*输出链表节点的值*/

temp=temp->next/*跟踪链表增长*/

}

printf("链表打印结束!!")

}

这是两个不同的概念。

1

指针是C语言中的一个数据类型。在链表的节点中,可能包含多个指针。

2

指针域是指的链表中用来指向相关节点的指针,一般是下一个,对于双向链表,也包括指向上一个的指针。

3

对于链表节点,可以分为数据域和指针域两部分。数据域中可能包含有指针类型。指针域中必然是指针类型。