链表练习包括(创建遍历插入删除逆置排序)
完成单链表操作,要求节点构造类型。
1、建立学生结构体(学号,姓名,成绩)
2、循环调用头插法创建整表
3、遍历单链表
4、任意位置插入一个完整的学生信息
5、任意位置删除一个学生。
6、单链表逆置
7、单链表按照学生成绩排序。
main.c
#include "link.h"
int main(int argc, const char *argv[])
{Plink L=creat_link();//创建单链表头节点for(int i=0;i<9;i++){head_insert(L);}
#if 0any_insert(L,2);//任意添加output_link(L);any_delet(L,3);//任意删除output_link(L);link_re(L);//逆序output_link(L);
#endifpopul(L);output_link(L);return 0;
}
link.c
#include"link.h"
Plink creat_link(){Plink L=malloc(sizeof(linkk));if(NULL==L){printf("创建链表失败!\n");return NULL;}else{L->len = 0;L->next = NULL; }return L;
}int head_insert(Plink L)
{if(NULL==L){printf("该头节点为空!\n");return -1;}else{Plink Q=creat_link();printf("请输入学号、姓名、年级\n");scanf("%d %s %d",&Q->s.id,Q->s.name,&Q->s.gra);Q->next = L->next;L->next = Q;L->len++;}return 0;
}int output_link(Plink L)
{if(NULL==L){printf("无法遍历链表!\n");return -1;}else{Plink Q = L->next;while(Q != NULL){printf("\t学号:%d\t姓名:%s\t年级:%d\t\n",Q->s.id,Q->s.name,Q->s.gra);Q = Q->next;}}printf("\n");return 0;
}
int any_insert(Plink L,int k)
{if(NULL == L||k<1||k>L->len+1){printf("插入失败!\n");return -1;}Plink Q=L;Plink M=creat_link();printf("请输入学号、姓名、年级\n");scanf("%d %s %d",&M->s.id,M->s.name,&M->s.gra);for(int i=1;i<k;i++){Q=Q->next;}M->next = Q->next;Q->next = M;L->len++;
}
int any_delet(Plink L,int k)
{if(NULL == L||k<1||k>L->len+1){printf("删除失败!\n");return -1;}Plink M,Q=L;for(int i=1;i<k;i++){Q=Q->next;}M = Q->next;Q->next=Q->next->next;free(M);M=NULL;L->len--;return 0;
}int link_re(Plink L)
{Plink T,Q;Q=L->next;T=Q->next;while(T!=NULL){Q->next=T->next;T->next = L->next;L->next = T;T = Q->next;}return 0;
}
int popul(Plink L)
{Plink Q,Z;if(L==NULL){printf("排序失败!\n");return -1;}else{for(int i=0;i<L->len;i++){for(Q=L->next,Z =L;Q->next!=NULL;Q=Q->next,Z=Z->next){if(Q->s.gra>Q->next->s.gra){Plink X=Q,Y=Q->next;X->next = Y->next;Y->next = X;Z->next = Y;}}}}return 0;
}
link.h
#ifndef _LINK_H_
#define _LINK_H_
#include<myhead.h>typedef struct
{int id;char name[20];int gra;
}stu;
typedef struct node
{union{ int len;stu s;};struct node *next;
}linkk,*Plink;Plink creat_link();
int head_insert(Plink);
int output_link(Plink);
int any_insert(Plink ,int);
int any_delet(Plink,int);
int link_re(Plink);
int popul(Plink);
#endif