头部互动开始 -->

数据结构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 @ 2024-04-23 00:57  罗天天  阅读(40)  评论(1)    收藏  举报