寒假第一周

本文深入探讨了结构体成员的访问方式,包括通过.符号和->操作符进行访问,以及结构体指针的使用。此外,详细介绍了链表的概念,包括其非连续存储结构和逻辑顺序的实现方式。并通过头插法和尾插法创建链表的过程,展示了链表的动态数据结构特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体成员的访问

通过.符号一级一级访问,也可以通过->来访问。

结构体指针

定义一个指向结构体的指针,指针会传递结构体的地址。

#include <stdio.h>
struct list{
	int n=5;
};
int main()
{
	struct list *p;
	printf("%p",p);	
}

typedef

关键字:typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。

#include <stdio.h>
typedef struct list{
	int n;
}link;
int main()
{
	link *p;
	printf("%p",p);	
}

链表

链表的定义: 链表是一种物理储存单元上非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成。即是不连续的内存空间。

创建链表的方法:
头插法:申请一个头节点,把新数据加入到头节点与上一个数据之间。倒序插入;

#include <stdio.h>
#include <stdlib.h>
char mingzi[10];
char flag;
typedef struct student{
	char name[10];
	struct student *next;
}list;
list *head=NULL,*pre,*current;
void creatlist (list *);
void putlist (list *);
int main(void)
{
	creatlist (head);
	putlist(head);	
}
void creatlist (list *)
{
	head=(list *)malloc(sizeof(list));
	pre=NULL;
	head->next=NULL;
	pre=head->next;
	while(flag!='N')
	{
		pre=(list *)malloc(sizeof(list));
		printf("input name:");
		scanf("%s",pre->name);
		getchar();
		pre->next=head->next;
		head->next=pre;
		printf("continue to input?(Y or N):");
		scanf("%c",&flag);		
	}
}
void putlist (list *head)
{
	list *show;
	show=head->next;
	while(show!=NULL)
	{
		printf("%s\n",show->name);
		show=show->next;
	}
}


2.尾插法,加入新数据后,在最后一个节点末尾加入新数据,并将新数据的下一指针指向空来代表单链表的结束。

#include <stdio.h>
#include <stdlib.h>
char mingzi[10];
char flag;
typedef struct student{
	char name[10];
	struct student *next;
}list;
list *head,*current,*pre;
void creatlist (list *);
void putlist (list *);
int main(void)
{
	creatlist (head);
	putlist(head);	
}
void creatlist (list *)
{
	head=(list *)malloc(sizeof(list));
	current=head;
	while(flag!='N')
	{
		pre=(list *)malloc(sizeof(list));
		printf("input name:");
		scanf("%s",pre->name);
		getchar();
		current->next=pre;
		current=pre;
		printf("continue to input?(Y or N):");
		scanf("%c",&flag);
	}
	current->next=NULL;
}
void putlist (list *head)
{
	list *show;
	show=head->next;
	while(show!=NULL)
	{
		printf("%s\n",show->name);
		show=show->next;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值