当前位置: 首页 > news >正文

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

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

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


http://www.mrgr.cn/news/34498.html

相关文章:

  • 常见协议及其默认使用的端口号
  • 全栈开发(二):springBoot3连接mysql数据库
  • Spring Boot | 使用 `@Scheduled`: 定时任务的实现与优化
  • 【论文速看】DL最新进展20240923-长尾综述、人脸防伪、图像分割
  • c语言面试字符串复制
  • Python练习宝典:Day 3 - 选择题 - 字符串与正则表达式、基础练习补充
  • C:内存函数
  • Python 二次开发金橙子打印软件:开启高效打印新旅程
  • 【已解决】键盘输入数字-使用JAVA语言实现键盘输入的数字再通过快速排序算法输出
  • 二期 1.4 Nacos安装部署 - Window版
  • 注册讲堂 | 医疗器械组合包类产品常见问题(2)
  • 【既约分数 / B】
  • ZH_qaq 博客公告
  • 测试面试题:Web端与APP端区别?
  • Linux下搭建iSCSI共享存储-(Linux-IO Target)
  • 【链表操作】链表长度
  • 分享5款全能AI论文写作工具,一键生成万字论文
  • 在线文档搜索服务测试报告
  • 机械快门,电子快门,电子前帘快门 的原理
  • 基于微信小程序的商品展示+ssm(lw+演示+源码+运行)