#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指向下一个结点
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)