创建单链表,存储4个学生信息(年龄,分数,姓名)
1、建立学生结构体数组,存放4个学生信息,循环调用插入函数,建立整表2、任意位置插入一个新学生。
2、变量e是学生结构体变量。
3、任意位置删除一个学生
4、单链表逆置后将学生信息输出
main.c
#include"link.h"
int main(int argc, const char *argv[])
{
Plink L=get_head();
int i;
stu a;
for(i=0;i<4;i++)
{
printf("年龄:");
scanf("%d",&a.age);
printf("分数:");
scanf("%d",&a.score);
printf("名字:");
scanf("%s",a.name);
tail_insert(L,a);
}
output_node(L);
stu e;
printf("年龄:");
scanf("%d",&e.age);
printf("分数:");
scanf("%d",&e.score);
printf("名字:");
scanf("%s",e.name);
any_pos_insert(L,2,e);
output_node(L);
any_pos_dele(L,3);
output_node(L);
node_reverse(L);
output_node(L);
return 0;
}
link.c
#include"link.h"
Plink get_head()
{
Plink p = malloc(sizeof(Link));
if(p==NULL)
{
printf("申请头结点失败\n");
return NULL;
}
p->len = 0;
p->next = NULL;
return p;
}
int tail_insert(Plink L,stu a)
{
if(L==NULL)
{
printf("单链表不存在\n");
return -1;
}
Plink t = L;
int i;
for(i=0;i<L->len;i++)
{
t=t->next;
}
Plink p = malloc(sizeof(Link));
p->data = a;
p->next = NULL;
t->next = p;
L->len++;
}
int output_node(Plink L)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在\n");
return -1;
}
int i;
Plink t=L;
for(i=0;i<L->len;i++)
{
t=t->next;
printf("%d\t%d\t%s\n",t->data.age,
t->data.score,t->data.name);
}
printf("\n");
}
int any_pos_insert(Plink L,int pos,stu e)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在\n");
return -1;
}
int i;
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->data=e;
p->next = t->next;
t->next = p;
L->len++;
}
int any_pos_dele(Plink L,int pos)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在\n");
return -1;
}
int i;
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink Q=t->next;
t->next = Q->next;
free(Q);
Q=NULL;
L->len--;
}
int node_reverse(Plink L)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在\n");
return -1;
}
Plink Q=L->next->next;
Plink t=L->next;
while(Q!=NULL)
{
t->next = Q->next;
Q->next = L->next;
L->next = Q;
Q = t->next;
}
}
link.h
#ifndef _LINK_H_
#define _LINK_H_
#include"myhead.h"
typedef struct
{
int age;
int score;
char name[20];
}stu;
typedef struct node
{
union{
int len;
stu data;
};
struct node *next;
}Link,*Plink;
Plink get_head();
int tail_insert(Plink L,stu a);
int output_node(Plink L);
int any_pos_insert(Plink L,int pos,stu e);
int any_pos_dele(Plink L,int pos);
int node_reverse(Plink L);
#endif