单链表的c结构体分析

/* example9_7.c   创建字符串链表并将其输出 */
#include <stdlib.h>
#include <stdio.h>
struct string
{
   char ch;
   struct string *nextPtr;
};
struct string *creat(struct string *h);
void print_string(struct string *h);
int num=0;
void main()
{
   struct string *head;                     /*定义表头指针*/
   head=NULL;                               /*创建一个空表*/
   printf("请输入一行字符(输入回车时程序结束):\n");
   head=creat(head);                            /*调用函数创建链表*/
   print_string(head);                          /*调用函数打印链表内容*/
   printf("\n输入的字符个数为:%d\n",num);
}
struct string *creat(struct string *h)
{
   struct string *p1,*p2;
   p1=p2=(struct string*)malloc(sizeof(struct string));     /*申请新结点*/
   if(p2!=NULL)
   {
      scanf("%c",&p2->ch);  /*输入结点的值*/
      p2->nextPtr=NULL;     /*新结点指针成员的值赋为空*/
   }
   while(p2->ch!='\n')
   {
      num++;                /*字符个数加1 */
      if(h==NULL)
        h=p2;               /*若为空表,接入表头*/
      else
        p1->nextPtr=p2;     /*若为非空表,接入表尾*/
      p1=p2;
      p2=(struct string*)malloc(sizeof(struct string)); /*申请下一个新结点*/
      if(p2!=NULL)
      {
        scanf("%c",&p2->ch);    /*输入结点的值*/
         p2->nextPtr=NULL;
      }
   }
   return h;
}
void print_string(struct string *h)
{
   struct string *temp;
   temp=h;                  /*获取链表的头指针*/
   while(temp!=NULL)
   {
        printf("%-2c",temp->ch);  /*输出链表结点的值*/
        temp=temp->nextPtr;       /*移到下一个结点*/
   } 
}

以上引用自C语言程序设计教程

为更好的理解指针与链表,做以下分析:

struct string *head;
head=NULL;

head指针本质上也是一个变量值,储存了目标对象的地址
head头指针的结构为:

即一个有指向功能的变量

连接p1、p2节点之后:
这里写图片描述

其中

struct string *p1,*p2;

定义p1 pointer、p2 pointer ;用来存放后续结点的地址,起连接作用

p1=p2=(struct string*)malloc(sizeof(struct string));

申请后续结点,将其地址值分别赋给指针p1、p2

h=p2;

将指针p2地址赋给h,即使p2连接到头指针

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值