数据结构作业day03
main.c 创建概念菜单,stu.h中 定义学生和单链表结构体(学号,姓名,年龄)
功能1:录入学生信息采用尾插法将学生信息存入单链表。
功能2:任意位置插入一个学生
功能3:任意位置删除一个学生
功能4:将单链表逆置再输出。
link.c
#include"link.h"
Plink apply()
{
Plink p = malloc(sizeof(Link));
if(p==NULL)
{
printf("申请失败!\n");
return NULL;
}
printf("申请成功\n");
return p;
}
Plink create()
{
Plink L = apply();
if(L==NULL)
{
printf("创建空间失败!\n");
return NULL;
}
L->len=0;
L->next = NULL;
printf("创建成功\n");
return L;
}
void rear_insert(Plink L)
{
int i;
Plink t = L;
for(i=0;i<L->len;i++)
{
t = t->next;
}
Plink p = apply();
printf("学号:");
scanf("%d",&p->message.id);
printf("姓名:");
scanf("%s",p->message.name);
printf("年龄:");
scanf("%d",&p->message.age);
p->next = NULL;
t->next = p;
L->len++;
}
void input_link(Plink L)
{
int i,num;
printf("请输入学生数量:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("请输入第%d位同学信息:",i+1);
rear_insert(L);
}
}
void link_output(Plink L)
{
int i;
Plink t = L;
for(i=0;i<L->len;i++)
{
t = t->next;
printf("\t%d\t%s\t%d\n",t->message.id,t->message.name,t->message.age);
}
}
void anypos_insert(Plink L,int pos)
{
printf("%d",pos);
printf("%d",L->len);
if(pos<1||pos>L->len+1||L==NULL||L->len == 0)
{
printf("插入失败\n");
}
else
{
Plink t = L;
int i;
for(i=0;i<pos-1;i++)
{
t = t->next;
}
Plink p = apply();
printf("输入插入学生的信息:");
printf("学号:");
scanf("%d",&p->message.id);
printf("姓名:");
scanf("%s",p->message.name);
printf("年龄:");
scanf("%d",&p->message.age);
p->next = t->next;
t->next = p;
L->len++;
}
}
void anypos_del(Plink L,int pos)
{
if(pos<0||pos>L->len||L==NULL)
{
printf("删除失败\n");
}
else
{
int i;
Plink t = L;
for(i=0;i<pos-1;i++)
{
t = t->next;
}
Plink Q = apply();
Q=t->next;
t->next = t->next->next;
free(Q);
Q = NULL;
L->len--;
}
}
void reserve(Plink L)
{
Plink t=L->next;
Plink p=t->next;
while(p!=NULL)
{
t->next=p->next;
p->next=L->next;
L->next=p;
p=t->next;
}
}
main.c
#include "link.h"
int main(int argc, const char *argv[])
{
int ch;
while(1)
{
printf("\t------系统菜单------\n");
printf("\t1、录入学生信息,采用尾插法将信息存入单链表\n");
printf("\t2、任意位置插入一个学生\n");
printf("\t3、任意位置删除一个学生\n");
printf("\t4、将单链表逆置在输出\n");
printf("\t0、退出菜单\n");
printf(" 请输入你的选择:");
scanf("%d",&ch);
Plink L = create();
switch(ch)
{
case 1:
{
input_link(L);
link_output(L);
}
break;
case 2:
{
int pos;
printf("请输入插入位置:");
scanf("%d",&pos);
anypos_insert(L,pos);
link_output(L);
}
break;
case 3:
{
int pos;
printf("请输入插入位置:");
scanf("%d",&pos);
anypos_del(L,pos);
}
break;
case 4:
reserve(L);
break;
case 0:
return 0;
break;
}
}
return 0;
}
link.h
#ifndef _LINK_H_
#define _LINK_H_
#include <myhead.h>
#define MAX 100
typedef struct student
{
int id;
char name[20];
int age;
}stu;
typedef struct node
{
union
{
stu message;
int len;
};
struct node *next;
}Link,*Plink;
Plink apply();
Plink create();
void rear_insert(Plink);
void input_link(Plink);
void link_output(Plink);
void anypos_insert(Plink,int);
void anypos_del(Plink,int);
void reserve(Plink);
#endif