求助!关于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”。 没学过链表,无法帮你了,帮你顶一下吧! 第一个题,我也没学过链表,但是可以将他们当做一维数组来用,做一个for循环,到最后一个数可以重新赋值,第二个很简单,把每个月的天数和八号的星期数据弄进去很容易算出来的
第三个用一个类冒泡法的思想很容易就可以弄出来的,注意要从后往后冒泡。
还没学到这里。。。。。。 链表传来传去的还有点蒙, #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");
}
这是贵大题目对不对···亲···找到了,虽然有点晚,但是还是给你尽尽心···· 第一个是典型的约瑟夫环问题 你最好谷歌或者百度一下 约瑟夫环对约瑟夫环有个具体了解 学习链表约瑟夫环是一定要搞懂滴仅是个人意见仅供参考 第一题链表懂的话非常简单,不懂的话讲思路你也听不懂。
第二题可以弄一个结构体,里面有月份跟对应月份的天数,然后判断,把日期后的月份天数加起来,具体可能还要有减法,然后对7取余数就好了。
第三题也是很简单,不用冒泡排序,把它当成字符处理,查一下数字跟字幕的ACII码,判断一下就分成两边了。 心境安宁就好 发表于 2014-4-15 22:18 static/image/common/back.gif
第一题链表懂的话非常简单,不懂的话讲思路你也听不懂。
第二题可以弄一个结构体,里面有月份跟对应月份的 ...
第三题用判断的话不还是得一个一个对比过去吗? 清明 发表于 2014-4-16 21:44 static/image/common/back.gif
第三题用判断的话不还是得一个一个对比过去吗?
是,但是跟冒泡排序不一样,N个数比N次,冒泡排序是(1+n)n/2,时间复杂度差好多 自杀问题的变种。。。。, 第一题。。。
页:
[1]