mymain.c
#include "fun.h"
int main(int argc, const char *argv[])
{
Plink L = get_head();
head_insert(L);
head_insert(L);
head_insert(L);
head_insert(L);
output(L);
putchar(10);
Plink e=get_head();
head_insert(e);
output(e);
putchar(10);
pos_insert(L,e,2);
output(L);
putchar(10);
pos_dele(L,3);
output(L);
putchar(10);
change(L);
output(L);
putchar(10);
return 0;
}
fun.c
#include "fun.h"
int i,j;
Plink get_head()
{
Plink L = malloc(sizeof(Link));
if(L==NULL)
{
printf("申请头结点失败\n");
return NULL;
}
L->len=0;
L->next = NULL;
return L;
}
int head_insert(Plink L)
{
if(L==NULL)
{
printf("fault\n");
return -1;
}
Plink t = L;
Plink p = malloc(sizeof(Link));
p->next = t->next;
t->next = p;
scanf("%d",&p->data.age);
// printf("%d",p->age);
scanf("%d",&p->data.score);
scanf("%s",p->data.name);
L->len++;
return 0;
}
int output(Plink L)
{
if(L==NULL)
{
printf("fault\n");
return -1;
}
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);
}
return 0;
}
int pos_insert(Plink L,Plink e,int pos)
{
if(L==NULL)
{
printf("fault\n");
return -1;
}
Plink t = L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink Q=malloc(sizeof(Link));
e=e->next;
Q->data.age=e->data.age;
Q->data.score=e->data.score;
strcpy(Q->data.name,e->data.name);
Q->next=t->next;
t->next=Q;
L->len++;
return 0;
}
int pos_dele(Plink L,int pos)
{
if(L==NULL)
{
printf("fault\n");
return -1;
}
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink Q = t->next;
t->next=t->next->next;
L->len--;
free(Q);
Q=NULL;
return 0;
}
int change(Plink L)//单链表逆置
{
if(L==NULL||L->len==0)
{
printf("fault\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;
}
return 0;
}
fun.h
#ifndef _FUN_H_
#define _FUN_H_
#include<myhead.h>
struct stu
{
int age;
int score;
char name[20];
};
typedef struct node
{
union
{
int len;
struct stu data;
};
struct node *next;
}Link,*Plink;
Plink get_head();
int head_insert(Plink L);
int output(Plink L);
int pos_insert(Plink L,Plink e,int pos);
int pos_dele(Plink L,int pos);
int change(Plink L);
#endif