1、建立学生结构体数组,存放4个学生信息,循环调用插入函数,建立整表2、任意位置插入一个新学生。变量e是学生结构体变量。
3、任意位置删除一个学生。
4、单链表逆置后将学生信息输出。
my.c
#include "link.h"
int main(int argc, const char *argv[])
{
Pnode L = get_memory();
stu stu1[4] ={ {20,100,"小红"},
{21,90,"小明"},
{22,99,"小李"},
{23,77,"小白"}
};
int stu_size = sizeof(stu1)/sizeof(stu1[0]);
//头插
for(int i=0;i<stu_size;i++){
tail_insert(L,stu1[i]);
}
//输出
output_info(L);
//任意位置插入
stu e = {99,8888,"大爷"};
any_loc_insert(L,2,e);
printf("\n任意位置插入后\n");
output_info(L);
//任意位置删除
any_loc_delete(L,3);
printf("\n任意位置删除后\n");
output_info(L);
//逆转
reverse_link(L);
printf("\n反转后\n");
output_info(L);
destroy_link(L);
return 0;
}
link.c
#include"link.h"
Pnode get_memory()
{
Pnode L = malloc(sizeof(Node));
if(L== NULL){
printf("申请空间失败\n");
return NULL;
}
L->len = 0;
L->next =NULL;
// memset(L->data,0,sizeof(L->data));
return L;
}
int head_insert(Pnode L,stu s)
{
if(L== NULL){
printf("链表不存在\n");
return -1;
}
Pnode p = malloc(sizeof(Node));
p->data =s;
p->next = L->next;
L->next = p;
L->len++;
}
int tail_insert(Pnode L,stu s)
{
if(L== NULL){
printf("链表不存在\n");
return -1;
}
Pnode t = L;
for(int i =0 ;i<L->len;i++)
{
t=t->next;
}
Pnode p = malloc(sizeof(Node));
p->data =s;
p->next = NULL;
t->next = p;
L->len++;
}
int output_info(Pnode L)
{
if(L== NULL||L->len==0){
printf("链表不存在\n");
return -1;
}
Pnode t =L;
for(int i = 0;i<L->len;i++)
{
t=t->next;
printf("以下是第%d个学生信息\n",i+1);
printf("姓名=%s,成绩=%d,年龄=%d\n",t->data.name,
t->data.score,
t->data.age);
}
printf("打印成功\n");
}
int any_loc_insert(Pnode L,int loc,stu e)
{
if(L== NULL||L->len==0){
printf("链表不存在\n");
return -1;
}
Pnode t=L;
for(int i = 0;i<loc-1;i++)
{
t=t->next;
}
Pnode p =malloc(sizeof(Node));
p->data = e;
p->next = t->next;
t->next =p;
L->len++;
printf("%d\n",L->len);
printf("添加成功\n");
}
int any_loc_delete(Pnode L,int loc)
{
if(L== NULL||L->len==0){
printf("链表不存在\n");
return -1;
}
Pnode t =L;
for(int i = 0;i<loc-1;i++)
{
t=t->next;
}
Pnode Q = t->next;
t->next = t->next->next;
L->len--;
free(Q);
Q=NULL;
return 0;
}
int reverse_link(Pnode L)
{
if(L== NULL||L->len == 0){
printf("链表不存在\n");
return -1;
}
Pnode t=L->next;
Pnode Q=t->next;
while(Q!=NULL){
t->next = Q->next;
Q->next =L->next;
L->next = Q;
Q=t->next;
}
}
int destroy_link(Pnode L)
{
if(L== NULL){
printf("链表不存在\n");
return -1;
}
Pnode t = L;
if(t!=NULL){
t=t->next;
free(L);
L=t;
}
printf("销毁成功\n");
return 0;
}
link.h
#ifndef _LINK_H_
#define _LINK_H_
#include<myhead.h>
typedef char str[20];
#define MAX 30
typedef struct
{
int age;
int score;
str name;
}stu;
typedef struct node
{
union{
int len;
stu data;
};
struct node *next;
}Node,*Pnode;
Pnode get_memory();
int head_insert(Pnode L,stu s );
int output_info(Pnode L);
int any_loc_insert(Pnode L,int loc,stu e);
int any_loc_delete(Pnode L,int loc);
int reverse_link(Pnode L);
int destroy_link(Pnode L);
int tail_insert(Pnode L,stu s);
#endif