头部互动开始 -->

数据结构Day3 笔试题(考研题)

数据结构Day3 笔试题(考研题)

/********************************************************************************************************
 *  file name:  zuoye.c
 *  author   :  15070884254@163.com
 *  date     :  2024/04/22
 *  function :  对链表进行相应的初始化
 *  note     :  None
 ******************************************************************************************************/

// 指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改
typedef int DataType_t;

// 构造链表的结点,链表中所有结点的数据类型应该是相同的
typedef struct LinkedList
{
  DataType_t data;         // 结点的数据域
  struct LinkedList *next; // 结点的指针域

} LList_t;

// 创建一个空链表,空链表应该有一个头结点,对链表进行初始化
LList_t *LList_Create(void)
{
  // 1.创建一个头结点并对头结点申请内存
  LList_t *head = (LList_t *)calloc(1, sizeof(LList_t));
  if (NULL == head)
  {
    perror("Calloc memory for head is Failed");
    exit(-1);
  }

  // 2.对头结点进行初始化,头结点是不存储有效内容的!!!
  head->next = NULL;

  // 3.把头结点的地址返回即可
  return head;
}
/********************************************************
 *  func name:  FindDaoShuK
 *  author   :  15070884254@163.com
 *  date     :  2024/04/22
 *  function :  查找一个带头结点的倒数第k个位置上的结点
 *  note     :  若查找成功,算法输出该结点的data值,并返回1;否则,只返回0
 * Copyright (c)  2023-2024   cececlmx@126.com   All rightReserved
*******************************************************/
int FindDaoShuK(LList_t *head, DataType_t data)
{
  LList_t *findbdk = NULL;// 初始化寻找倒数指针
  LList_t *findend = NULL;// 初始化遍历遍历到尾部
  LList_t *findcount = NULL;
  int k;
  printf("请输入k的值为:");
  scanf("%d",&k);
  

  // 判断链表是否为空,如果为空,则寻找失败
  if (NULL == head->next)
  {
    return 0;
  }

  // 使用2个指针指向首结点
  findbdk = head->next;
  findend = head->next;
  findcount = head->next;
 int count=1;//计算链表长度
 while(findcount->next){
  count++;
  findcount=findcount->next;
 }

 //判断倒数第k的数是否在链表长度内
 if(k>count){
  printf("您输入k的值大于链表长度,倒过去数不对,再见");
  return 0;
 }

 //让findend指针与findbdk指针能够在findend到达尾结点时,findbdk是倒数第k个
 for(int i=0;i<k-1;i++){
  findend=findend->next;
 }
 while(findend->next){

  /* 开始循环到链表尾部*/
  findbdk=findbdk->next;
  findend=findend->next;
 }
 //此时findbdk指向倒数第k的结点
 printf("倒数第%d个位置上的结点为%d",k,findbdk->data);
 return 1;

}
posted @   罗天天  阅读(26)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示