自学内容网 自学内容网

链表练习包括(创建遍历插入删除逆置排序)

完成单链表操作,要求节点构造类型。

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 0
any_insert(L,2);//任意添加
output_link(L);
any_delet(L,3);//任意删除
output_link(L);
link_re(L);//逆序
output_link(L);
#endif
popul(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


原文地址:https://blog.csdn.net/qq_53841892/article/details/142468617

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!