这是某公司的笔试题,各位看看是否能给出标准答案来!原题如下:
1. 操作符重载 (10分)
class CStaff:pulic CObject
{
Public:
CStaff();
CStaff &operator=(const CStaff &staffSrc);
private:
CString n_name;
Int m_Salary:
};
请重载此类赋值操作符。2.链表
Struct LinkedList
{
int value;
LinkedList *pHead;
}
Struct LinkedList *pHead;
请编写删除链表的头、尾和中间的第n个节点的程序。(13分)3.编写一个算法,用来访问所有二叉排序树的节点。(15分)
1. 操作符重载 (10分)
class CStaff:pulic CObject
{
Public:
CStaff();
CStaff &operator=(const CStaff &staffSrc);
private:
CString n_name;
Int m_Salary:
};
请重载此类赋值操作符。2.链表
Struct LinkedList
{
int value;
LinkedList *pHead;
}
Struct LinkedList *pHead;
请编写删除链表的头、尾和中间的第n个节点的程序。(13分)3.编写一个算法,用来访问所有二叉排序树的节点。(15分)
{
if (&staffSrc != this)
{
n_name = staffSrc.n_name;
m_Salary = staffSrc.m_Salary;
} return *this;
}
// Note: if success, return TRUE, or will return FALSEBOOL DeleteNode(int nNode, lpLinkList pHead)
{
ASSERT (pHead != NULL); if (1 == nNode) // head node
{
delete pHead;
return TRUE;
} lpLinkList pWrk = pHead;
lpLinkList pPre;
for (int i = 1; i < nNode; i++)
{
pPre = pWrk;
pWrk = pHead->pHead;
if (NULL == pWrk) // cannot find this node
{
return FALSE;
}
} pPre->pHead = pWrk->pHead;
delete pWrk; return TRUE;
}
{
int Data;
TreeNode *Left;
TreeNode *Right;
}*lpTreeNode;// 中序遍歷二叉樹
// Print all date
void MidTravl(lpTreeNode pRoot)
{
ASSERT (pRoot != NULL); if (pRoot->Left != NULL)
{
MidTravl(pRoot->Left);
} printf("Data = %d", pRoot->Data); if (pRoot->Right != NULL)
{
MidTravl(pRoot->Right);
}
}
它们问
int &a; 这样定义对不对?还有:
short x=32700;
short y=367;
short z;
求z=x+y等于多少?
我认为,对于32位机来说,short范围是-32768~32767,上面的家法出现溢出现象,大出300,在汇编中好像专门有溢出的处理方式,不过记得不清楚了。
关于你的第二个代码,我有一点不太明白,在for循环中的:
pPre = pWrk;
pWrk = pHead->pHead;(这一句不太明白,我想是不是应该改成"pWrk = pPre->pHead;",请指点)另外,请不要随便评论别人合不合格!
当然也应该说前几年的科班毕业的基础是比不过现在的别的专业在校学生了!
2000,1999年前大多的大学还没开C++,(甚至c呢),大多是教Pascal!现在又得自学!
再过两年大家又都一样(。net....)
这是IT的幸或不幸呢?论事不论人吧!
老了,只能活到老,学到老了!
羡慕现在的在校学生啊!有人教C++,VC,MFC,JAVA...还有Internet,宽带,廉价PC
当年资源匮乏,就一本 谭浩强 的C ,睁着抢着买呢!
上千万的销售记录恐怕再也不会有后来者了吧!
? lpLinkList pWrk = pHead;
? lpLinkList pPre;
请指教。
if (1 == nNode) // head node
{
lpLinkList pWrk = pHead;
pHead = pWrk->pHead;
delete pWrk;
return TRUE;
}
struct LinkedList *del(Struct LinkedList *pHead,int num)
{
Struct LinkedList *p1,*p2;
if(pHead==NULL)
{
printf("List null!\n");
return(pHead);
}
p1=pHead;
if(num==1&&p1->pNext!=NULL)
{
pHead=p1->pNext;
return(pHead);
}
for(int i=1;i<num;i++)
{
p2=p1;
p1=p1->pNext;
if(p1=NULL)
{
printf("Not find the node\n");
return(pHead);
}
}
p2->pNext=p1->pNext;
return(pHead);
} 如有不足之处请指教!
你好, 看到你的代码了,你是北京的硕士吧? 说实话,我不认为你应该在这些基础的东西上花费事件,而应该把精力放在应用领域,去解决那些有深度有难度的东西。这些大学本科生的东西,对你来说太小儿科了。 假如你想做程序员,那就应该学学如何写出风格良好的代码。简单的说,你的代码虽然能完成功能,但是有经验的程序员一眼就能看出你的代码用到产品中会造成大量的隐患。 建议你看看编码规范之类的书籍,然后再重新看看你的代码有哪些缺陷。 我写的代码是10分钟产物,没有仔细考虑过,谢谢你的提醒。 上面是fzd999发给我的留言。首先,非常感谢你的指点。作程序员,搞编程的都很辛苦,而且这方面的知识增长与经验和工作时间长短有很大关系,但是,这也是一种“青春饭”的行业,我们也要想想以后的路。不过,不管怎么说,程序写的好又快的确实让人佩服。有时间大家相互学习,QQ:149328838
增加两个public函数
get_n_name;get_m_Salary;
中国的程序员看到印度的程序员写的代码,都回认为很笨,用一个词形容就是"又臭又长",但人家的程序却很健壮。中国的程序员总是追求短小精悍,使用优美的算法等。但中国的程序员写的程序却没有人家的健壮。作者在和一个印度的程序员交流的时候当问到这个问题的时候得到的回答,我们没有必要考虑,现在的计算机CPU都上GHz的速度了,内存都512MB,少的也有128MB了,我们考虑的是程序在能完成设计要求的功能的情况下尽可能的健壮。
各位朋友,我觉得我们是不是都走入了一个误区!!!!我们总是在比谁的程序算法好,谁的技术是别人不会的,于是就出现了有人用VC写了若干个加密算法就拿出来卖钱。有必要吗?我最讨厌的就是在应聘的时候面试的人员考你算法,什么链表,什么二叉树的遍历,我敢说,让这些人使用他们最熟悉的语言写一个对树控件任意增删数据的一个过程,他们未必就能完成!
基础知识固然重要,但并不是掌握了基础知识就真正的掌握了编程技巧。纸上谈兵在任何时候都不会被推崇的!!!
我是就事论事,如果冒犯了那个大哥,还望能原谅!!
印度的程序员叫Coder,高中生就能做,只要完成功能就行,根本不需要也不会考虑更多。而我们中国呢?程序员叫Programmer,软件类型也五花八门,按你说的,咱们的民族软件也就别发展,跟着印度人做外包去好了。 顺便说一下,如果你想学对树控件任意增删数据的过程,我倒是可以写给你一个风格良好效率很高而且算法思路明晰的代码。
#define EMPTYLIST 0
#define FAILED -1
//删除链表中的第n个节点(包括头节点和尾节点)
//若删除成功则返回1,空表返回0,没找到返回 -1
int DeleteNode(int n)
{
if( pHead == NULL) //空表
return EMPTYLIST; struct LinkedList *pcur,*pre;
long i=1; pcur=pre=pHead; while(pcur->pHead != NULL) //查找节点指针
{
if(i == n)
{
break;
}
i++;
pre = pcur;
pcur = pcur->pHead;
} if(i != n)
{
return FAILED; //没找到
} if(i == 1) //表头
{
pHead = pcur->pHead;
}
else
{
pre->pHead = pcur->pHead;
}
delete pcur; return SUCCESSED;
}//删除链表的头节点
//若删除成功则返回1,空表返回0int DeleteHead()
{
if(pHead == NULL)
return EMPTYLIST; struct LinkList *p;
p = pHead; pHead = p->pHead;
delete p; return SUCCESSED;
}//删除链表的尾节点
//若删除成功则返回1,空表返回0
int DeleteTail()
{
if(pHead == NULL)
return EMPTYLIST; struct LinkList *p;
p = pHead;
if(p->pHead == NULL) //只有一个节点的情况
{
delete p;
pHead == NULL;
return SUCCESSED;
} for(;p->pHead->pHead != NULL;p = p->pHead) ; delete p->pHead; p->Head = NULL; return SUCCESSED;
}
不知道,是不是我就不行了。不是到bill写不写得出来