C语言链表

链表

链表是一种数据类型,用于存储同种类型的批量数据。

数组的缺点:

  • 静态分配:需要定义,编译时分配空间,程序执行时不能改变该存储区的大小。
  • 必须占用连续的存储空间。

链表按需求动态分配存储空间:

  1. 使用C语言提供的标准函数malloc
  2. 掌握一个便准函数的用法,需要做到以下3点:
  1. 记忆函数名并明确函数功能。
  2. 形参的个数及类型
  3. 函数是否有值,值的类型与含义

malloc的功能:动态分配一个存储单元,形参一个无符号整数,决定存储单元所占据的字节数,函数返回类型位void*,值为该单元的地址。

例如:malloc(4)

             1000                                  1                                     2                                    3

该单元是动态生成的,应通过指针间接访问。

int *p;

p=(int*)malloc(4);

p=(int *)malloc(sizeof(int));

*p表示当前所指向的单元,但单元的大小是有P的基类型决定的。

  • sizeof()是C语言中的一个运算符。
  • 运算量放在小括号中,可以是类型名,变量名和常量。
  • 其值为该类型的量在内存中所占的字节数。
  • p++是,越过一个单元,单元的大小依然由p的基类型决定
  1. 键盘输入一串字符,以回车结束,适用与字符个数相同的存储单元将其存放起来。

while((ch=getchar())!=\n)

{

malloc(1);

}

char *p;

while((ch=getchar())!=\n)

{

p=(char *)malloc(1);

*p=ch;

}

若键盘输入abcd回车

abc将无法被表示

 一个存储单元被分成两个部分,每部分存储的数据类型还是不同的

链表中节点类型的定义:

struct node

{

char data;

struct node *naxt;

}

若键盘输入abcd回车

char *p;

while((ch=getchar())!=’\n’)

{

   p=(char *p)malloc(1);

   *p=ch;

}

struct node *p;

while((ch=getchar())!=’\n’)

{

   P=(struct node *)malloc(sizeof(struct node));

  1. >data=ch;

}

程序中用到malloc()时,要包含stdlib.h

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
	char data;   //代表数据域 
	struct node *next; //代表指针域,指向直接后继元素 
	
}Node, *LinkList;   //LinkList被声明为Node的指针,是指向下一个结点的后继指针 
LinkList create()
{
	LinkList h,r,s;
	char ch;
	h=(LinkList)malloc(sizeof(Node));  //创建首原结点,并初始化 
	r=h;     //头指针指向首原结点 
	while((ch=getchar())!='\n')
	{
		s=(LinkList)malloc(sizeof(Node));   //创建第一个新结点并初始化 
		s->data=ch;
		r->next=s;
		r=s;   //建立新结点与直接前驱结点的逻辑关系 
	} 
	r->next=0;
	return h;   //返回建立的结点,返回头指针h即可通过头指针找到整个链表 
}
int main()
{
	LinkList head,p;
	head=create();
	p=head->next;
	while(p)
	{
		printf("%c",p->data);
		p=p->next; 
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值