C语言指针链表具体怎么弄???

C语言指针链表具体怎么弄???,第1张

#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("链表打印结束!!")

}

下面的程序是单链表的建立与输出,都有详细的注释,相信你能看的懂

但要想学习链表必须得掌握了一定的C语言基础

下面这个链表的作用是建立5个结点的单链表,5个结点的值输入以后,依次输出各个结点的值

#include<stdio.h>

#include<stdlib.h>

//链表的建立与输出

struct node//定义结点的类型

{

int num,score

node*link

}

void main()

{

node*creat(int n)//函数原型声明

void print(node*h)//函数原型声明

node*head=0//定义链头指针并初始化

head=creat(5)//调用creat函数创建链表

print(head)//调用print函数输出链表

}

node*creat(int n)

{

node*h=0,*p,*q

int i

for(i=1i<=ni++)

{

q=(node*)malloc(sizeof(node))//分配一个结点空间

scanf("%d%d",&q->num,&q->score)//输入新结点的值

q->link=0//新结点的指针域置0

if(h==0)

h=q//第一个结点作为链头结点

else

p->link=q//新结点添加到链表的末尾

p=q

}

return h//返回链头指针

}

void print(node*h)//链表输出函数的定义

{

while(h)//当指针h非空时输出h所指结点的值

{

printf("num=%d\tscore=%d\n",h->num,h->score)

h=h->link//使h指向下一个结点

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11221214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存