链表的创建,增加,打印
#include<stdio.h>
#include<stdlib.h>
struct student
{
int data;
struct student *next;
};
struct student *create_head()
{
struct student *head;
head = (struct student*)malloc(sizeof(struct student));
if(head == NULL)
{
printf("内存分配失败");
}
else
{
head->next = NULL;
return(head);
}
}
struct student create_list(int n , struct student *head)
{
struct student *p1,*p2;
int i;
p1 = head;
for( i = 0 ; i < n ;i ++)
{
p2 = (struct student*) malloc (sizeof(struct student));
if(p2 == NULL)
{
printf("内存分配失败");
}
else
{
p1->next = p2;
p1 = p2 ;
p1->next = NULL;
}
}
}
void data_add(int n,struct student *head)
{
struct student *p1;
int i;
p1 = head;
for( i = 0;i < n; i++ )
{
printf("请输入第%d个数据:",i+1);
scanf("%d",&(p1->data));
p1 = p1->next;
}
}
void data_print(int n,struct student *head)
{
struct student *p1;
int i;
p1 = head;
for(i = 0; i < n; i ++)
{
printf("%5d ",p1->data);
p1 = p1->next;
}
printf("\n");
}
void main()
{
struct studet *head;
int n;
head = create_head();
printf("请输入链表的节点数n:");
scanf("%d",&n);
create_list(n,head);
data_add(n,head);
data_print(n,head);
}
总结:链表主要依靠指针,想要学好链表,指针,结构体,数据的存放方式等一定要理解透彻,由此为基础向后拓展(删除,修改,插入…)其实并不困难,去网上查找其他的代码都是一个整体去实现增删改查功能,而我却要分开写,这样更容易理解。