C语言数据结构笔试题
2014-11-23 22:53
120 查看
1. 实现一个lite版的字符串替换函数
C/C++:
char *strreplace(char *str, const char *sub, const char *rep)
Java:
char[] strreplace(char[] str, char[] sub, char[] rep)
限制条件和要求如下:
1. 其中str为原字符串,sub为待被替换的子串。为简单起见, 假定字符串sub和rep长度一样
2. 直接对原字符串str进行修改并返回, 不得使用malloc/new开辟新的内存空间
3. 不得使用任何库函数/API, 包括但不限于strlen, strstr, strcpy, 如需使用类似功能, 请自行实现
2. 假设有两个单链表A和B,不带头节点,且长度一样,示例如下:
A: 1->2->3->4
B: a->b->c->d
请逆转交替合并两个链表,示例结果如下:
4->d->3->c->2->b->1->a
C/C++:
节点类型定义如下:
struct Node {
struct Node *next;
...
}
函数定义如下:
Node *reverse_merge(Node *A, Node *B)
其中A、B分别是指向对应链表的第一个节点的指针
请直接修改原有链表的next指针完成该操作,并返回新链表的第一个节点的指针
Java:
节点类型定义如下:
class Node {
public Node next;
...
}
函数定义如下:
Node reverse_merge(Node A, Node B)
其中A、B分别是对应链表的第一个节点的引用
请直接修改原有链表的next引用完成该操作,并返回新链表的第一个节点的引用
C/C++:
char *strreplace(char *str, const char *sub, const char *rep)
Java:
char[] strreplace(char[] str, char[] sub, char[] rep)
限制条件和要求如下:
1. 其中str为原字符串,sub为待被替换的子串。为简单起见, 假定字符串sub和rep长度一样
2. 直接对原字符串str进行修改并返回, 不得使用malloc/new开辟新的内存空间
3. 不得使用任何库函数/API, 包括但不限于strlen, strstr, strcpy, 如需使用类似功能, 请自行实现
int mystrlen(const char *s) { //计算字符串长度 const char* p = s; while(*p != '\0') p++; return p - s; } int findstr(const char *str,const char *sub) { int str_len = mystrlen(str); int sub_len = mystrlen(sub); int i = 0; int j = 0; while(i <str_len && j < sub_len ) { //相等就对i,j进行++操作 if(str[i] == sub [j]) { ++i; ++j; } else { //退回到第一次匹配的下一坐标 i = i - j + 2; j = 0; } } //j大于或者等于sub_len的时候表示sub与str比较完成 if(j >= sub_len) return i - sub_len; else return -1; } char *strteplace(char *str,const char *sub,char *rep) { int a;
<span style="white-space:pre"> </span>//查找该字符串是否在 if(a = findstr(str,sub) == -1) { printf("字符串不存在"); return NULL; } int rep_len = mystrlen(rep); char *p = str; char *s = str; for (int i = a,j = 0;j < rep_len; i++,j++) { str[i] = rep[j]; } return str; }
2. 假设有两个单链表A和B,不带头节点,且长度一样,示例如下:
A: 1->2->3->4
B: a->b->c->d
请逆转交替合并两个链表,示例结果如下:
4->d->3->c->2->b->1->a
C/C++:
节点类型定义如下:
struct Node {
struct Node *next;
...
}
函数定义如下:
Node *reverse_merge(Node *A, Node *B)
其中A、B分别是指向对应链表的第一个节点的指针
请直接修改原有链表的next指针完成该操作,并返回新链表的第一个节点的指针
Java:
节点类型定义如下:
class Node {
public Node next;
...
}
函数定义如下:
Node reverse_merge(Node A, Node B)
其中A、B分别是对应链表的第一个节点的引用
请直接修改原有链表的next引用完成该操作,并返回新链表的第一个节点的引用
typedef struct Node { char data; struct Node *next; }Node; typedef Node *ListNode; Node *reverse_merge(Node *A, Node *B) { ListNode p,s,t = NULL; p = ReverseList(A); s = ReverseList(B); if(p == NULL || s == NULL) return NULL; ListNode temp = p; while(s != NULL) { //循环遍历两个链表将s中的节点依次插入p链表中 t = s->next; s->next= p->next; p->next = s; p = s->next; s = t; } return temp; } //对链表进行反转 ListNode ReverseList(ListNode list) { Node *tmp = NULL; Node *p = NULL; if (list == NULL) { return NULL; } tmp = list->next;
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>//不断的将tmp节点的后继节点移动到头节点</span>
while (tmp->next != NULL) { p = tmp->next; <span style="white-space:pre"> </span> tmp->next = p->next; <span style="white-space:pre"> </span> p->next = list->next; list->next = p; } return list; }
相关文章推荐
- 汇编语言数据结构
- go 语言中的类型及数据结构
- (Java)单链表Java语言顺序结构实现(数据结构三)
- 【脚本语言系列】关于Python数据结构,你需要知道的事
- 【脚本语言系列】关于JavaScript数据结构,你需要知道的事
- 数据结构(Java语言)——ArrayList简单实现
- 数据结构(java语言描述)——串数组(n阶魔方)
- C语言数据结构-1.线性表之顺序存储结构
- C语言基础——数据结构
- 第2周SHH数据结构—【项目1 - C/C++语言中函数参数传递的三种方式】
- 新书预告---《数据结构--C#语言描述》
- 数据结构第二周项目1--C/C++语言中函数传递的三种方式之方法三引用作形参
- R语言数据结构3—array
- R语言数据结构介绍-入门篇
- C语言数据结构-单链表
- C语言基础—数据结构之单向循环链表和双向循环链表
- 【数据结构】线性表顺序结构的操作---C/C++语言
- 程序员代码面试指南:IT名企算法与数据结构题目最优解-字符串问题:C/C++语言实现
- C++语言数据结构 串的基本操作实例代码
- 汇编语言数据结构