
数据结构
文章平均质量分 65
albert_crazyer
这个作者很懒,什么都没留下…
展开
-
程序员面试宝典之数据结构基础----①单链表的建立、测长、打印(读后)
单链表的逆序(递归非递归),删除节点,插入,排序都很熟悉了,如果面试遇到,相信大家都能够写出来,但是,今天看到这个题目的时候,却花了一些时间来捉摸,不是难,二十有很多细节要注意:下面是程序员面试宝典书三上的代码,稍稍有点改动。#include #include #include using namespace std; //notice the define of struct, the n原创 2012-10-02 21:15:39 · 1925 阅读 · 1 评论 -
程序员面试宝典之数据结构----入栈与出栈
出栈和入栈的实现与上一篇的队列的入队与出队处理方式基本相同,此处要注意栈的出栈操作。 #include #include #include using namespace std; typedef struct Node { int data; struct Node *next; }node; typedef struct Stake //notice原创 2012-10-03 21:26:06 · 1647 阅读 · 0 评论 -
程序员面试宝典之数据结构基础----⑥双链表的建立,插入和删除
前几篇有了单链表的各种操作,双链表的操作与单链表类此,只是增加了一个前置指针而已,双链表的各种操作形同单链表,此处只给出双链表的创建,插入和删除操作: 代码已经过编译运行,确认无误(编译环境:codeblocks下的GNU GCC Compile) #include #include #include using namespace std; #define NUM 3 //对于双原创 2012-10-03 15:18:11 · 1665 阅读 · 0 评论 -
程序员面试宝典之数据结构基础---⑤单链表逆序的递归与非递归实现
#include #include using namespace std; struct ListNode { ListNode* p_Next; int p_Value; }; ListNode* Reverse_List(ListNode* pHead) { //非递归实现单链表逆序输出。 ListNode* pHead_New = NULL;原创 2012-09-29 17:06:12 · 840 阅读 · 0 评论 -
程序员面试宝典之数据结构基础----②单链表删除节点(读后)
删除节点比较简单,但要注意两种情况,是否头结点? ----细节决定成败。 本次删除借助了上篇的创建单链表,代码放在了一块,便于测试。。。。 #include #include #include using namespace std; //notice the define of struct, the node is not a variable,it is the name of原创 2012-10-02 22:13:34 · 1217 阅读 · 1 评论 -
程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
用两个栈实现一个队列功能的思想比较巧妙: 共分两步: 第一步,入队——用一个栈的push操作实现,将入队值压入一个栈中(栈一) 第二步,出队——在另一个栈中删除值(栈二):若栈二非空,直接从栈二中pop出即可 若栈二为空,则将栈一中的所有元素pop出来,一次push进栈二中,然后从栈二中pop出元素。 注:只有当stack2 为空时,才会从stack1中pop出元素push进stack2原创 2012-10-03 22:25:45 · 983 阅读 · 0 评论 -
程序员面试宝典之数据结构基础----单链表的逆序打印
单链表的逆序有两种方法,递归和非递归,前面已经有具体的实现,这里把单链表的逆序输出单独拿出来,因为这里用的递归方法比较巧妙,当然,可以先把单链表逆序,然后再顺序打印出,也是可以的,这里直接用递归的方法实现打印: void print_reverse_list(node* head) { assert(head); else if(head->next == NULL)原创 2012-10-03 15:54:04 · 813 阅读 · 0 评论 -
程序员面试宝典之数据结构基础----循环链表(约瑟夫环问题)
关于循环链表,即单链表的为指针指向头结点,当然在建立循环链表的时候可以将链表的为指针指向头结点,但本例用的是先建立一个只有一个节点的循环链表(即next指针指向自己结点),然后再在此循环链表中插入节点,实现最终的循环链表(见代码),这里我默认指定了一个“伪头结点”的节点(即刚开始建立的节点),即使在后面寻找第K个节点的时候也是用到了这个“伪头结点”。 #include #include原创 2012-10-03 18:51:45 · 6347 阅读 · 0 评论 -
程序员面试宝典之数据结构基础----队列的入队与出队
我的盲点:将队列入队、出队的方向搞反,同时将队列中节点指针的指向弄反。 没有考虑队列出队后,该队列是否为空的情况。 入队时,队列为空要单独处理。 #include #include #include using namespace std; //Notice:队列的数据结构组成,先入队列(即出队列部分)部分为头(first),后入队列部原创 2012-10-03 20:29:45 · 15623 阅读 · 0 评论 -
程序员面试宝典之数据结构基础----④单链表排序(读后)
单链表的排序:排序的方法有很多种,可以根据排序时间复杂度或空间复杂度分,而对于单链表的排序,能交换的只能是相邻节点的值,这就让我想到,最好用冒泡排序。逻辑上最为简单,只需知道一个节点和他的下一个节点即可,只需一个辅助指针,排序时只是在相邻节点间互换节点值。 当然单链表的排序方法还很多,比如快速排序,只需两个节点指针,都从前往后遍历,每次都按照head节点值分开,而且效率比较高。比如选择排序也可以原创 2012-10-03 11:19:20 · 673 阅读 · 0 评论 -
程序员面试宝典之数据结构基础-----③单链表的插入
单链表的插入,注意分三种情况,插入到头部前,插入到尾部后,其他。 仍然是细节决定成败。。。 #include #include #include using namespace std; //notice the define of struct, the node is not a variable,it is the name of the struct.so it ca原创 2012-10-02 22:33:46 · 587 阅读 · 0 评论 -
程序员面试宝典之数据结构基础----排序之快速排序(简单快速排序与改进快速排序)总结
快速排序是一种划分交换排序,他采用的思想是分治法。 分治法的基本思想是将原来问题分解为若干个规模很小的机构与原来问题相似的子问题。递归的解决这些子问题,然后将这些子问题的解组合为原问题的解。 ①。简单快速排序算法:(a、以第一个元素为分界 b、有重复元素时效率低) 时间复杂度O(nlogn),空间复杂度O(logn)。 其实现的伪代码: void qsort1(l, u)原创 2012-10-04 15:18:13 · 1650 阅读 · 0 评论