创建单链表,存储4个学生信息(年龄,分数,姓名)。
1、建立学生结构体数组,存放4个学生信息,循环调用插入函数,建立整表
2、任意位置插入一个新学生。变量e是学生结构体变量。
3、任意位置删除一个学生。
4、单链表逆置后将学生信息输出。
mymain.c
# include "stu.h"
int main ( int argc, const char * argv[ ] )
{
Plink L = creat_link ( ) ;
stu s[ MAX] = { { 18 , 89 , "王五" } ,
{ 20 , 90 , "张三" } ,
{ 19 , 96 , "李玲" } ,
{ 18 , 88 , "赵柳" } } ;
for ( int i= 0 ; i< MAX; i++ ) {
tail_insert ( L, s[ i] ) ;
}
node_output ( L) ;
int pos;
printf ( "请输入你要插入元素的位置:" ) ;
scanf ( "%d" , & pos) ;
insert_any ( L, pos) ;
node_output ( L) ;
int d;
printf ( "请输入你要删除元素的位置:" ) ;
scanf ( "%d" , & d) ;
delet_any ( L, d) ;
node_output ( L) ;
node_reverse ( L) ;
node_output ( L) ;
return 0 ;
}
stu.c
# include "stu.h"
Plink creat_link ( ) {
Plink p = malloc ( sizeof ( Link) ) ;
if ( p== NULL ) {
printf ( "创建链表失败!\n" ) ;
return NULL ;
}
p-> len = 0 ;
p-> next = NULL ;
return p;
}
int tail_insert ( Plink p, stu s) {
if ( p== NULL ) {
printf ( "链表不存在!\n" ) ;
return - 1 ;
}
Plink t = p;
for ( int i= 0 ; i< p-> len; i++ ) {
t = t-> next;
}
Plink P = malloc ( sizeof ( Link) ) ;
P-> s = s;
P-> next = NULL ;
t-> next = P;
p-> len++ ;
return 0 ;
}
int node_output ( Plink p) {
if ( p== NULL || p-> len == 0 ) {
printf ( "链表不存在或者链表为空!\n" ) ;
return - 1 ;
}
Plink t = p;
for ( int i= 0 ; i< p-> len; i++ ) {
t = t-> next;
printf ( "年龄:%d\t成绩:%.2f\t姓名:%s\n" , t-> s. age, t-> s. score, t-> s. name) ;
}
return 0 ;
}
int insert_any ( Plink p, int pos) {
if ( p== NULL ) {
printf ( "链表不存在!\n" ) ;
return - 1 ;
}
Plink t = p;
for ( int i= 0 ; i< pos- 1 ; i++ ) {
t = t-> next;
}
Plink Q = malloc ( sizeof ( Link) ) ;
int age;
float score;
char name[ 20 ] ;
printf ( "请输入插入学生的年龄:" ) ;
scanf ( "%d" , & age) ;
printf ( "请输入插入学生的成绩:" ) ;
scanf ( "%f" , & score) ;
printf ( "请输入插入学生的姓名:" ) ;
scanf ( "%s" , name) ;
Q-> s. age = age;
Q-> s. score = score;
strcpy ( Q-> s. name, name) ;
Q-> next = t-> next;
t-> next = Q;
p-> len++ ;
printf ( "插入学生信息成功!\n" ) ;
return 0 ;
}
int delet_any ( Plink p, int pos) {
if ( p== NULL || p-> len== 0 ) {
printf ( "链表不存在或者链表为空!\n" ) ;
return - 1 ;
}
Plink t = p;
for ( int i= 0 ; i< pos- 1 ; i++ ) {
t = t-> next;
}
Plink Q = t-> next;
t-> next = Q-> next;
free ( Q) ;
Q = NULL ;
p-> len-- ;
printf ( "删除学生信息成功!\n" ) ;
return 0 ;
}
int node_reverse ( Plink p) {
if ( p== NULL || p-> len == 0 ) {
printf ( "链表不存在或者链表为空!\n" ) ;
return - 1 ;
}
Plink t = p-> next;
Plink Q = t-> next;
while ( Q!= NULL ) {
t-> next = Q-> next;
Q-> next = p-> next;
p-> next = Q;
Q = t-> next;
}
printf ( "链表逆置成功!\n" ) ;
return 0 ;
}
stu.h
# ifndef _STU_H_
# define _STU_H_
# include <myhead.h>
# define MAX 4
typedef struct {
int age;
float score;
char name[ 20 ] ;
} stu;
typedef struct node {
union {
int len;
stu s;
} ;
struct node * next;
} Link, * Plink;
Plink creat_link ( ) ;
int tail_insert ( Plink p, stu s) ;
int node_output ( Plink p) ;
int insert_any ( Plink p, int pos) ;
int delet_any ( Plink p, int pos) ;
int node_reverse ( Plink p) ;
# endif
运行结果