鱼C论坛

 找回密码
 立即注册
查看: 3005|回复: 10

求助!关于C语言以下几个题目!

[复制链接]
发表于 2013-4-8 10:47:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1、建立一个顺序排列环状链表,节点中的数据如下图,有一个header指针指向最小节点(整数5)。输入一个整数,如果该整数在链表中存在,则删除该节点,并且header指针仍然指向最小的节点;若不存在,则不作任何操作,最后输出链表中的所有数据。例如,输入整数“12”,输出“5,7,18,25,47,77,79,80”。
                               未命名.jpg
                              
2、今天是2013年4月8日星期一,编写程序,输入今天开始到12月31日之间的任意日期,输出那一天是星期几。例如输入“5(回车)20(回车)”(5月20日),输出应为“Monday”。
3、输入一个字符串,将其中的数字字符移动到非数字字符之后,并保持数字字符和非数字字符输入时的顺序。例如,输入字符串“ab4f35gr#a6”,输出为“abfgr#a4356”。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-12 07:11:02 | 显示全部楼层
没学过链表,无法帮你了,帮你顶一下吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-12 08:40:02 From FishC Mobile | 显示全部楼层
第一个题,我也没学过链表,但是可以将他们当做一维数组来用,做一个for循环,到最后一个数可以重新赋值,
第二个很简单,把每个月的天数和八号的星期数据弄进去很容易算出来的
第三个用一个类冒泡法的思想很容易就可以弄出来的,注意要从后往后冒泡。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-12 09:14:36 | 显示全部楼层
还没学到这里。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-12 09:54:50 | 显示全部楼层
链表传来传去的还有点蒙,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-4-15 21:53:45 | 显示全部楼层
#include <stdio.h>
#include <malloc.h>

struct node {
int val;
struct node *next;
};

struct node* create_list(int *val_arr, unsigned int len);
struct node* delete_node(struct node *header, int _val);
void print_list(struct node *header);

int main() {
int val_list[] = {5, 7, 12, 18, 25, 47, 77, 79, 80};
struct node *the_header = create_list(val_list, sizeof(val_list) / sizeof(int));

printf("former list values \n");
print_list(the_header);

int val;
printf("input a int value : ");
scanf("%d", &val);
the_header = delete_node(the_header, val);

printf("now list values \n");
print_list(the_header);

return 0;
}

// 创建链表
struct node* create_list(int *val_arr, unsigned int len) {
if (val_arr == NULL || len <= 0) {
  return NULL;
}
unsigned int i = 0;
struct node *header, *tmp = NULL;
for (; i < len; i++) {
  struct node *new_node = (struct node *)malloc(sizeof(struct node));  
  new_node->val = val_arr[i];
  new_node->next = NULL;
  if (i == 0) {
   header = new_node;
   tmp = header;
  } else {
   tmp->next = new_node;
   tmp = tmp->next;
  }
}
return header;
}

// 删除链表中指定节点
struct node* delete_node(struct node *header, int _val) {
if (header == NULL) {
  return NULL;
}
struct node *tmp_header = header, *tmp1 = header, *tmp2 = NULL;

do {
  if (_val == tmp1->val) {
   if (tmp1 == header) {
    tmp_header = header->next;   
   } else {
    tmp2->next = tmp1->next;
   }
   free(tmp1);
   break;
  } else {
   tmp2 = tmp1;
   tmp1 = tmp1->next;
  }
} while (tmp1 != NULL);

return tmp_header;
}

// 链表各节点数值输出
void print_list(struct node *header) {
if (header == NULL) {
  return;
}
while (header != NULL) {
  printf("%d ", header->val);
  header = header->next;
}
printf("\n");
}

这是贵大题目对不对···亲···找到了,虽然有点晚,但是还是给你尽尽心····
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-15 22:17:43 | 显示全部楼层
第一个是典型的约瑟夫环问题    你最好谷歌或者百度一下 约瑟夫环  对约瑟夫环有个具体了解   学习链表约瑟夫环是一定要搞懂滴  仅是个人意见  仅供参考
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-15 22:18:15 | 显示全部楼层
第一题链表懂的话非常简单,不懂的话讲思路你也听不懂。
第二题可以弄一个结构体,里面有月份跟对应月份的天数,然后判断,把日期后的月份天数加起来,具体可能还要有减法,然后对7取余数就好了。
第三题也是很简单,不用冒泡排序,把它当成字符处理,查一下数字跟字幕的ACII码,判断一下就分成两边了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-16 21:44:52 | 显示全部楼层

第三题用判断的话不还是得一个一个对比过去吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-21 22:21:44 | 显示全部楼层
清明 发表于 2014-4-16 21:44
第三题用判断的话不还是得一个一个对比过去吗?

是,但是跟冒泡排序不一样,N个数比N次,冒泡排序是(1+n)n/2,时间复杂度差好多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-21 22:23:27 | 显示全部楼层
自杀问题的变种。。。。, 第一题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 11:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表