摘要:
一、死锁 操作系统中有若干进程并发执行,它们不断申请、使用、释放系统资源,虽然系统的进程协调、通信机制会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能继续运行,否则就阻塞的情况。此时,若不借助外界因素,谁也不能释放资源,谁也不能解除阻塞状态。根据这样的情况,操作系统中的死锁被定义为系统中两个或者多个进程无限期地等待永远不会发生的条件,系统处于停滞状态,这就是死锁。产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁.. 阅读全文
摘要:
本博文摘自伍迷老师的《大话数据结构》,想学数据结构的,大大的推荐此书... 事实上,目前还没有十全十美的排序算法,有优点就会有缺点,即使是快速排序法,也只是在整体性能上优越,它也存在排序不稳定、需要大量辅助空间、对少量数据排序无优势等不足。因此我们就来从多个角度来剖析一下提到的各种排序的长与短。 我们将7种算法的各种指标进行对比,如表9‐10‐1所示。 表9‐10‐1排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性冒泡排序 O(n2) O(n) O(n2) O(1) 稳定简... 阅读全文
摘要:
归并排序(Merging Sort)就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到⌈n/2⌉(⌈x⌉表示不小于x的最小整数)个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。代码:#define MAXSIZE 10 /* 用于要排序数组个数最大值,可根据需要修改 */typedef struct{ int r[MAXSIZE+1]; /* 用于存储要排序数组,r[0]用作哨兵或临时变量 */ int length; ... 阅读全文
摘要:
还是不喜欢位运算啊。。。啊啊。。。刚在网上看到一个网友的位运算反转一个字节的帖子,贴过来学习积累啊...上代码:unsigned char reverse8( unsigned char c ){ c = ( c & 0x55 ) << 1 | ( c & 0xAA ) >> 1; c = ( c & 0x33 ) << 2 | ( c & 0xCC ) >> 2; c = ( c & 0x0F ) << 4 | ( c & 0xF0 ) >> 4; return c;}上分 阅读全文
摘要:
1、比较简单和容易理解的方法就是逐位比较法:#include <iostream> using namespace std; int findone(unsigned int n){ for(int i=0;n>0;n>>=1) i+=(n&1); return i; } int main(){ int n; cin>>n; cout<<findone(n)<<endl; return 0; }这种方法的缺点是比较费时,时间长度取决于n的位数,时间复杂度O(n)。假如上千上万位的话,每一位都要执行一遍,所用时间就很长了。 阅读全文
摘要:
随着软件测试技术的不断发展,测试方法也越来越多样化,针对性更强;选择合适的软件测试方法可以让我们事半功倍。以下是一些常用的软件测试方法: β测试_Beta测试 β测试,英文是Beta testing。又称Beta测试,用户验收测试(UAT)。 β测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。 当开发和测试根本完成时所做的测试,而最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其他人员完成,不能由程序员或测试员完成。 α测试_Alpha测试 α测试,英文是Alpha testing。又称Al... 阅读全文
摘要:
希尔排序的思想是分治法,以增量以某种方式递减的方法将待排序列分成几个的小序列,然后序列内进行直接插入排序。这个排序方法代码简洁易理解,如下:void ShellSort(int a[],int n){ int d = n/2;//初始增量设为待排序列长度的一半 int temp,i,j; while(d>=1) { for (i=d;i<n;i++) { if (a[i] < a[i-d]) { temp = a[i];//暂存需要插入的记录 for (j=i-d;j>=0 && a[j] > a[i];j-=d) { a[j+d] = a[j]; 阅读全文
摘要:
伍老师的《大话数据结构》是本思路清晰又讲解形象的书,十分适合入门者学习。我对堆排序以前很是害怕,所以特意仔细阅读了相关堆排序的内容,感觉完全理解啦。摘抄下来存档,方便自己随时查阅和复习。堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如果按照层序遍历的方式给结点从1开始编号,则结点之间满足如下关系:k[i]≥k[2i]&&k[i]≥k[2i+1] 或者k[i]≤k[2i]&&k[i]≤k[2i+1],其中,0<i<n/2。为什么i<n/2呢?现在回 阅读全文
摘要:
1、判断一个单链表中是否有环思路:给定两个指针fast和low都指向头结点,然后low每次前进一步,fast每次前进两步,如果此单链表中有环,那么fast和low一定会相遇,否则fast一定会先遇到null。实现代码如下:bool isCircle(LinkList *head){ LinkList *fast = head;//快指针 LinkList *low = head;//慢指针 while(low->next != NULL && fast->next->next != NULL) { low = low->next; fast ... 阅读全文
摘要:
GridView的模版列中加入按钮,触发按钮事件后,如何获取该行的某个值?<asp:TemplateField HeaderText="ResetPassword"><ItemTemplate><asp:Button ID="ResetBtn" runat="server" CssClass="ButtonInGridView" Text="Reset" onclick="ResetBtn_Click" /></ItemTemplat 阅读全文