题目
完成一个单链表操作,要求节点构造类型
1、建立学生结构体(学号,姓名,成绩)
2、循环调用头插法创建整表
3、遍历单链表
4、任意位置插入一个完整的学生信息
5、任意位置删除一个学生
6、单链表逆置
7、单链表按照学生成绩排序
main.c部分
#include"link.h"
int main(int argc, const char *argv[])
{
stu a[5]={{1001,"张三",9},{1003,"李四",95},{1002,"王五",88},{1005,"小明",99},{1004,"杰克",88}};
Plink L = create();
int i;
for(i=0;i<5;i++)
{
front_insert(L,a[i]); //头插法
}
output_link(L);
stu e={1009,"黑狗",99};
anypos_insert(L,2,e);
output_link(L);
anypos_dele(L,2);
output_link(L);
pink_re(L);
output_link(L);
bubble(L);
output_link(L);
return 0;
}
link.c部分
#include"link.h"
Plink create()
{
Plink p = malloc(sizeof(Link));
if(p==NULL)
{
printf("申请失败\n");
return NULL;
}
p->len=0;
p->next =NULL;
return p;
}
int front_insert(Plink L,stu e)
{
if(L==NULL)
{
printf("头插失败\n");
return -1;
}
Plink p = malloc(sizeof(Link));
p->data = e;
p->next = L->next;
L->next = p;
L->len++;
return 0;
}
int output_link(Plink L)
{
if(L==NULL||L->len==0)
{
printf("链表为空\n");
return -1;
}
int i;
Plink t=L;
for(i=0;i<L->len;i++)
{
t=t->next;
printf("学号:%d\t姓名:%s\t分数:%d\n", t->data.id,t->data.name,t->data.score);
}
printf("\n");
return 0;
}
int anypos_insert(Plink L,int pos,stu e)
{
if(pos<1||pos>L->len+1||L==NULL)
{
printf("插入失败\n");
return -1;
}
int i;
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->data=e;
p->next=t->next;
t->next=p;
L->len++;
return 0;
}
int anypos_dele(Plink L,int pos)
{
if(pos<1||pos>L->len||L->len==0||L==NULL)
{
printf("删除失败\n");
return -1;
}
Plink t=L;
int i;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink Q=t->next;
t->next=t->next->next;
free(Q);
Q=NULL;
L->len--;
return 0;
}
int pink_re(Plink L)
{
Plink Q=L->next;
Plink t=Q->next;
while(t!=NULL)
{
Q->next=t->next;
t->next=L->next;
L->next= t;
t=Q->next;
}
return 0;
}
int bubble(Plink L)
{
int i;
Plink j;
stu temp;
for(i=1;i<L->len;i++)
{
for(j=L->next;j->next!=NULL;j=j->next)
{
if(j->data.score>j->next->data.score)
{
temp=j->data;
j->data=j->next->data;
j->next->data=temp;
}
}
}
}
link.h部分
#ifndef _LINK_
#define _LINK_
#include<myhead.h>
typedef struct
{
int id;
char name[20];
int score;
}stu;
typedef struct node
{
union
{
int len;
stu data;
};
struct node *next;
}Link,*Plink;
Plink create();
int front_insert(Plink,stu);
int output_link(Plink);
int anypos_insert(Plink,int,stu);
int anypos_dele(Plink,int);
int pink_re(Plink);
int bubble(Plink);
#endif
运行

2855

被折叠的 条评论
为什么被折叠?



