C的链表的概念应用

链表有一个头指针变量head,它存放一个地址,该地址指向一个元素。链表中每一个元素都称为“节点”。每个节点都应包含两部分,一个用户需要用的实际数据和下一个节点的地址。head指向第一个节点,第一个元素又指向第二个节点,直到最后一个元素,该元素不再指向其他元素,它称为"表尾",它的地址存放的一个MULL的空地址,链表到此结束。

链表中各元素在内存中可以不是连续存放的,要找某一元素,必须先找到上一个元素,根据它提供的下一个元素的地址才能找到下一个元素,如果不同head指针,则整个链表都无法访问。

#include <stdio.h>
#define  NULL 0
struct Student
{
    long num;
    int score;
    struct Student* next;
};
int main(void)
{
    struct Student a,b,c,*head,*p;
    a.num=1;
    a.score=100;
    b.num=2;
    b.score=99;
    c.num=3;
    c.score=94;
    head=&a;
    a.next=&b;
    b.next=&c;
    c.next=NULL;
    p=head;
    do
    {
        printf("%d,%d\n",p->num,p->score);
        p=p->next;
    } while (p!=NULL);


}

这是一个静态的链表,所有节点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为“静态链表”。


处理动态链表所需的函数:

链表结构都是动态地分配存储的,即在需要时才开辟一个节点的存储单元,怎样动态的开辟和释放存储单元,有以下函数:

void *  malloc(unsigned int n);

其作用是在内存的动态存储区中分配一个长度为n的连续空间,此函数的值即返回值是一个指向分配域起始地址的指针,类型为void。如果此函数未能成功执行,如内存不够,则返回NULL空指针。


void*  calloc(unsigned n,unsigned size);

其作用是在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配域起始地址的指针。如果分配不成功,则返回NULL;用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。

void  free(void* p);

其作用是释放由P指向的内存区,使这部分内存区能够被其他辩论赛还有。无返回值。


typedef的使用:使用typedef声明新的类型名来代替已有的类型名,用新类型去定义变量。


typedef  stuct

{

int month;

int day;

int year;

}DATE;

DATE  birthday;

DATE* p;还可以进一步:

typedef   int  NUM[100]   声明NUM为整形数组类型

NUM  n;定义N为整形数组变量。

typedef int  (*POINTER)()  声明POINTER为指向函数的指针类型,该函数返回整形值

POINTER  p1,p2   p1 p2为POINTER类型的指针变量


#define   putchar(C)    fputc(c,stdout)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值