survivorQT 发表于 2013-4-8 10:47:47

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

1、建立一个顺序排列环状链表,节点中的数据如下图,有一个header指针指向最小节点(整数5)。输入一个整数,如果该整数在链表中存在,则删除该节点,并且header指针仍然指向最小的节点;若不存在,则不作任何操作,最后输出链表中的所有数据。例如,输入整数“12”,输出“5,7,18,25,47,77,79,80”。                                                             2、今天是2013年4月8日星期一,编写程序,输入今天开始到12月31日之间的任意日期,输出那一天是星期几。例如输入“5(回车)20(回车)”(5月20日),输出应为“Monday”。 3、输入一个字符串,将其中的数字字符移动到非数字字符之后,并保持数字字符和非数字字符输入时的顺序。例如,输入字符串“ab4f35gr#a6”,输出为“abfgr#a4356”。

属専色灰 发表于 2013-4-12 07:11:02

没学过链表,无法帮你了,帮你顶一下吧!

shansongh 发表于 2013-4-12 08:40:02

第一个题,我也没学过链表,但是可以将他们当做一维数组来用,做一个for循环,到最后一个数可以重新赋值,
第二个很简单,把每个月的天数和八号的星期数据弄进去很容易算出来的
第三个用一个类冒泡法的思想很容易就可以弄出来的,注意要从后往后冒泡。

luowm850 发表于 2013-4-12 09:14:36

还没学到这里。。。。。。

opqrew99 发表于 2013-4-12 09:54:50

链表传来传去的还有点蒙,

绿豆蛙 发表于 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;
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");
}

这是贵大题目对不对···亲···找到了,虽然有点晚,但是还是给你尽尽心····

liuwenzhi 发表于 2014-4-15 22:17:43

第一个是典型的约瑟夫环问题    你最好谷歌或者百度一下 约瑟夫环对约瑟夫环有个具体了解   学习链表约瑟夫环是一定要搞懂滴仅是个人意见仅供参考

心境安宁就好 发表于 2014-4-15 22:18:15

第一题链表懂的话非常简单,不懂的话讲思路你也听不懂。
第二题可以弄一个结构体,里面有月份跟对应月份的天数,然后判断,把日期后的月份天数加起来,具体可能还要有减法,然后对7取余数就好了。
第三题也是很简单,不用冒泡排序,把它当成字符处理,查一下数字跟字幕的ACII码,判断一下就分成两边了。

清明 发表于 2014-4-16 21:44:52

心境安宁就好 发表于 2014-4-15 22:18 static/image/common/back.gif
第一题链表懂的话非常简单,不懂的话讲思路你也听不懂。
第二题可以弄一个结构体,里面有月份跟对应月份的 ...

第三题用判断的话不还是得一个一个对比过去吗?

心境安宁就好 发表于 2014-4-21 22:21:44

清明 发表于 2014-4-16 21:44 static/image/common/back.gif
第三题用判断的话不还是得一个一个对比过去吗?

是,但是跟冒泡排序不一样,N个数比N次,冒泡排序是(1+n)n/2,时间复杂度差好多

喜欢散步 发表于 2014-4-21 22:23:27

自杀问题的变种。。。。, 第一题。。。
页: [1]
查看完整版本: 求助!关于C语言以下几个题目!