C语言链表结构
#include<stdio.h> //定义头文件
#include<stdlib.h>
typedef struct student // 定义结构体
{
int score; //定义数据
struct student *next; //定义结构体指针
}LinkList;
上述函数是为了定义结构体
LinkList *creat(int n)
{
LinkList *head,*node,*end; //定义头指针,普通指针
head=(LinkList*)malloc(sizeof(LinkList)); //为头指针添加空间
end=head; //头尾相连
for(int i=0;i<n;i++) //定义节点
{
node=(LinkList*)malloc(sizeof(LinkList)); //创造空间
scanf("%d",&node->score); //输入数据
end->next=node; // 尾指针的指针指向创造的空间
end=node; //将node的结构体数据赋给end
}
end->next=NULL; //结束以后将尾指针指向空白
return head; //返回头指针
}
```上述函数是为了创建链表
```c
void change(LinkList *list,int n)
{
LinkList *t=list;
int i=0;
while(i<n&&t!=NULL)
{
t=t->next;
i++;
}
if(t!=NULL)
{
puts("输入要修改的值");
scanf("%d",&t->score);
}
else
{
puts("节点不存在");
}
}
```上述函数是修改链表。
void delet(LinkList *list,int n)
{
LinkList *t=list; //,*in;
int i=0;
while(i<n&&t!=NULL)
{
in=t;
t=t->next;
i++;
}
if(t!=NULL)
{
in->next=t->next;
free(t);
}
else
{
puts("节点不存在");
}
}
```上述函数删除链表
void insert(LinkList *list,int n)
{
LinkList *t=list,*in;
int i=0;
while(i<n&&t!=NULL)
{
t=t->next;
i++;
}
if (t != NULL) {
in = (LinkList*)malloc(sizeof(LinkList));
puts("输入要插入的值");
scanf("%d", &in->score);
in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点
t->next = in;//填充t节点的指针域,把t的指针域重新指向in
}
else {
puts("节点不存在");
}
}
插入链表数据
{
LinkList *h=list;
while (h->next != NULL) {
h = h->next;
printf("%d ", h->score);
}
}
输出数据
**
总代码
**
#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
int score;
struct student *next;
}LinkList;
LinkList *creat(int n)
{
LinkList *head,*node,*end;
head=(LinkList*)malloc(sizeof(LinkList));
//scanf("%d",&node->score);
// end->next=node;
end=head;
for(int i=0;i<n;i++)
{
node=(LinkList*)malloc(sizeof(LinkList));
scanf("%d",&node->score);
end->next=node;
end=node;
}
end->next=NULL;
return head;
}
void change(LinkList *list,int n)
{
LinkList *t=list;
int i=0;
while(i<n&&t!=NULL)
{
t=t->next;
i++;
}
if(t!=NULL)
{
puts("输入要修改的值");
scanf("%d",&t->score);
}
else
{
puts("节点不存在");
}
}
void delet(LinkList *list,int n)
{
LinkList *t=list,*in;
int i=0;
while(i<n&&t!=NULL)
{
in=t;
t=t->next;
i++;
}
if(t!=NULL)
{
in->next=t->next;
free(t);
}
else
{
puts("节点不存在");
}
}
void insert(LinkList *list,int n)
{
LinkList *t=list,*in;
int i=0;
while(i<n&&t!=NULL)
{
t=t->next;
i++;
}
if (t != NULL) {
in = (LinkList*)malloc(sizeof(LinkList));
puts("输入要插入的值");
scanf("%d", &in->score);
in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点
t->next = in;//填充t节点的指针域,把t的指针域重新指向in
}
else {
puts("节点不存在");
}
}
void put(LinkList *list)
{
LinkList *h=list;
while (h->next != NULL) {
h = h->next;
printf("%d ", h->score);
}
}
int main()
{
LinkList *head,*node,*end;
int n,i;
printf("请输入节点数");
scanf("%d",&n);
printf("请输入数字");
head=creat(n);
put(head);
// printf(" 结束 ");
printf("是否修改数据是输入1 否输入0 \n");
scanf("%d",&i);
if(i==1)
{
printf("请输入节点数");
scanf("%d",&n);
change(head,n);
printf("结束");
put(head);
}
printf("是否删除数据 是输入1 否输入0\n");
scanf("%d",&i);
if(i==1)
{
printf("请输入节点数");
scanf("%d",&n);
delet(head,n);
printf("结束");
put(head);
}
printf("是否插入数据 是输入1 否输入0\n");
scanf("%d",&i);
if(i==1)
{
printf("请输入节点数");
scanf("%d",&n);
insert(head,n);
printf("结束");
put(head);
}
}