
数据结构
呼啸
09年开始编程,一直到现在。看看自己进步了什么。
展开
-
编程实现单链表的逆置
node *reverse(node *head){ node *p1,*p2,*p3; //申请三个结点 if(head==NULL || head->next==NULL) //如果目标单链表是空的,或是只有一个结点的情况return head;p1=head; //使p1指向头结点p2=p1->next;//使p1的next指向p2;while(p2) //当P2不为NU原创 2011-12-14 17:25:11 · 1768 阅读 · 0 评论 -
【数据结构之链栈的基本运算】
链栈的类型:typedef struct stacknode{ DataType data struct stacknode *next }StackNode; typedef struct{ StackNode *top;//栈顶指针 }LinkStack;链表的基本运算:public class LinkStack { //(1)置栈空 void In原创 2015-01-16 17:23:41 · 1196 阅读 · 0 评论 -
【数据结构之顺序栈的基本运算】
//顺序栈public class OrderStack { //(1)置空栈 void InitStack(SeqStack *S){ S->top = -1; } //(2)判断栈空 int StackEmpty(SeqStack *S){ return S->top == -1; } //(3)判断栈满 int StackFull(SeqStack *S){原创 2015-01-13 15:39:07 · 1812 阅读 · 0 评论 -
【数据结构之链队列的基本运算】
//链队列的基本运算public class LinkQueue { //(1)置空队 void InitQueue(LinkQueue *Q){ Q->front=Q->rear=NULL; } //(2)判断空 intQueueEmpty(LinkQueue *Q){ return Q->front==NULL && Q->rear->rear==NULL; } //(原创 2015-01-26 15:35:21 · 1249 阅读 · 0 评论 -
【数据结构】顺序表和链表的比较
顺序表和链表各有短长。在实际应用中究竟选用哪一种存储结构呢?这要根据具体问题的要求和性质来决定。通常有以下几方面的考虑:┌───┬───────────────┬───────────────┐│ │ 顺序表 │ 链表 │├─┬─┼───────────────┼───────────────┤│基│原创 2014-10-09 17:51:49 · 1190 阅读 · 0 评论 -
[数据结构]双链表删除结点P的操作
算法的思想就是:把P的前驱原创 2014-08-14 15:07:05 · 15687 阅读 · 0 评论 -
[数据结构]双向链表的前插操作
操作示意图:源码操作:原创 2014-08-12 11:53:07 · 4592 阅读 · 0 评论 -
【数据结构】两个单循环链表的连接操作
如果在单链表或头指针表示的链表上操作这个比较消耗性能,因为都需要遍历第一个链表,找到an,然后将b1链接到an的后面,时间复杂度是:O(n)。若在尾指针表示的单循环链表上实现,则只需改变指针,无需遍历,时间复杂度是:O(1)现在看算法实现,需要4个主要步骤,都注释了: LinkList Connect(LinkList A,LinkList B){ //假设A,B为非空循环链表的尾指针原创 2014-06-28 22:48:30 · 4673 阅读 · 0 评论 -
数据结构研究 ----单链表的按序号查找
采用一个计数器j=0;然后根据分配的序号i,在满足j代码:ListNode* GetNode(LinkList head,int i){ //在带头结点的单链表head中查找第i个结点,若找到(0<=i<=n), //则返回该结点的存储位置,否则返回NULL。 int j; ListNode *p; p=head;j=0;//从头结点开始扫描 while(p->ne原创 2014-02-13 09:26:27 · 5714 阅读 · 1 评论 -
数据结构研究--尾插法创建带头结点的单链表
算法思想就是:每读入一个字符后,创建一个临时结点,字符放进此节点数据域中,用尾巴指针指向临时结点,临时结点再作为尾巴结点。将尾巴结点的尾巴指针指向NULL。代码:public LinkList CreatListR1(void){ //用尾插法建立带头节点的单链表 char ch; LinkList head = (ListNode*)malloc(sizeof(ListNod原创 2014-02-11 17:54:12 · 5968 阅读 · 0 评论 -
数据结构研究--创建单链表
算法思想就是每读入一个字符,新建一个节点,把数据放到节点的数据域中,然后让新建的节点的next指针指向头节点。最后,把新节点做为新的头节点。看代码: public LinkList CreatListF(void){ //返回链表的头指针 char ch; LinkList head;//头指针 ListNode *s;//工作指针 head = NULL; ch =原创 2014-01-20 10:29:42 · 1266 阅读 · 0 评论 -
深入快速排序[Quick][三]最坏时间复杂度
最坏情况是每次划分选取的基准都是当前无序区中最小(或最大)的记录。划分的结果是基准左边的子区间为空(或右边的子区间为空),而划分所得的另一个非空的子区间中记录数目,仅仅比划分前的无序区中记录个数减少一个。因此,快速排序必须做n-1次划分,第i次划分开始时区间长度为n-i+1,所需的比较次数为n-i(1≤i≤n-1),故总的比较次数达到最大值:Cmax = n(n-1)/2=Cm原创 2013-03-21 09:41:45 · 1819 阅读 · 0 评论 -
深入快速排序(QuickSort)(一)算法思想
一、算法思想快速排序是C.R.A.Hoare(没有搜到他的信息#^_^#)于1962年提出的一种划分交换的排序,它采用了一种分治的策略。通常称其为分治法(Divide and ConquerMethod)。即先对整体进行分治,划分左右两段(左边的数值小于等于右边的值或者左边的值大于等于右边的值)。再把划分的好的段当作一个整体继续划分为两段,以此递归。(1)分治法的基本思想:将原原创 2013-03-15 11:11:23 · 1304 阅读 · 0 评论 -
深入快速排序(QuickSort)(二)简单伪代码
一、快速排序算法:QuickSortpublic void QuickSort(SeqList R,int low,int high){ //对R[low...high]进行快速排序 int pivotpos;//划分后的基准记录的位置 if(low<high){ //仅当区间长度大于1时才需排序 pivotpos = Partition(R,low,high);/原创 2013-03-15 15:16:51 · 16462 阅读 · 0 评论 -
冒泡排序
public void sort(int[] data){ int len= data.length; for(int i=0;i<len-1;i++){ int temp= 0; boolean isExchanged = false; for(int j=0;j<len-i-1;j++) { if((data[j])>(data[j+1])) {原创 2013-03-13 23:15:54 · 2886 阅读 · 1 评论