结构体成员的访问
通过.符号一级一级访问,也可以通过->来访问。
结构体指针
定义一个指向结构体的指针,指针会传递结构体的地址。
#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;
}
}