The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

#

     摘要: To download a presentation, just click on the appropriate presentation title below : Date   Presentation Title Presented By 26/04/2012   Why choose IMS/TM as your enterprise ...  阅读全文
posted @ 2012-06-11 14:01 Eric_jiang 阅读(493) | 评论 (0)编辑 收藏

posted @ 2012-06-07 15:58 Eric_jiang 阅读(201) | 评论 (0)编辑 收藏

posted @ 2012-06-07 15:51 Eric_jiang 阅读(179) | 评论 (0)编辑 收藏

原文题是严蔚敏同志的数据结构习题中第二章线性表中提出的问题。

原问如下:

2.24 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表与B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元表)排列的线性表C,并要求利用原表(即A表与B表)的结点空间构造C表。

分析:对两个或两个以上,结点按元素值递增/减排列的单链表进行操作时,应采用"指针平行移动、一次扫描完成"的策略。且链表A与链表B的长度大小不一定相等。

代码:

#include<iostream>   
using namespace std;  
typedef 
int ElemType;  
  
//两个递增的链表合并成递增的链表。   
typedef struct LNode  
{  
    ElemType data;  
    
struct LNode *next;  
}
  
LNode;  
typedef LNode 
*LinkList;  
void CreatList(LinkList &L,int n)  
{  
    LinkList p,q;  
    L
=new LNode;  
    L
->next=NULL;  
    q
=L;  
    cout
<<"请从小到大输入链表的元素:";  
    
for (int i=1;i<=n;i++)  
    
{  
        p
=new LNode;  
        cin
>>p->data;  
        p
->next=q->next;  
        q
->next=p;  
        q
=q->next;  
    }
  
    cout
<<"所创建得的递增有序链表为:";  
    p
=L->next;  
    
for (int j=1;j<=n;j++)  
    
{  
        cout
<<p->data<<" ";  
        p
=p->next;  
    }
  
    cout
<<endl;  
}
  
void CreatC(LinkList &A,LinkList &B,LinkList &C,int n)  
{  
    LinkList pa,pb,pc,pre
=NULL/*C结点的上一个结点*/,q/*t*/;  
    pa
=A->next;  
    pb
=B->next;  
  
//  C=t=A;// A   
    while (pa||pb)  
    
{  
        
if (!pb||((pa&&pb)&&(pa->data<pb->data)))  
        
{  
            
////将A的元素插入新表   
            pc=pa;  
            q
=pa->next;  
            pa
->next=pre;  
            pa
=q;  
        }
  
        
else  
        
{  
            pc
=pb;  
            q
=pb->next;  
            pb
->next=pre;  
            pb
=q; //将B的元素插入新表   
        }
  
        pre
=pc;  
    }
  
    cout
<<"合并后的递减有序链表为:";  
    C
=A;  
    A
->next=pc;  
    pa
=pc;  
    
for (int j=1;j<=n;j++)  
    
{  
        cout
<<pa->data<<" ";  
        pa
=pa->next;  
    }
  
    cout
<<endl;  
    getchar();  
}
  
void main()  
{  
    LinkList A,B,C;  
    
int n,m,k;  
    cout
<<"请输入链表***A***的长度:";  
    cin
>>n;  
    CreatList(A,n);  
    cout
<<"请输入链表***B***的长度:";  
    cin
>>m;  
    CreatList(B,m);  
    k
=m+n;  
    CreatC(A,B,C,k);  
    system(
0);  
    getchar();  
}
  


posted @ 2012-06-04 09:44 Eric_jiang 阅读(2900) | 评论 (2)编辑 收藏

第一讲 第1章概论——1(概念、逻辑结构、存储) 
http://db.pku.edu.cn/mzhang/ds/media/1_intro_LogStore.rm
第二讲 第1章 概论——2(存储结构,ADT,算法特征,算法量度)  
 http://db.pku.edu.cn/mzhang/ds/media/2_intro_StoreADTFunc.rm
第三讲 第2章线性表、栈和队列——1(线性表ADT和存储结构)
http://db.pku.edu.cn/mzhang/ds/media/3_List_ADTStore.rm
第四讲 第2章线性表、栈和队列——2(栈的存储和应用)
http://db.pku.edu.cn/mzhang/ds/media/4_List_Stack.rm
第五讲 第2章线性表、栈和队列——3(栈和表达式,栈和递归)
http://db.pku.edu.cn/mzhang/ds/media/5_List_StackExp.rm  
第六讲 第2章线性表、栈和队列——4(栈和递归,队列) 
 http://db.pku.edu.cn/mzhang/ds/media/6_List_RecQueue.rm
第七讲 第3章字符串——1(字符串概念、ADT、简单模式匹配)
http://db.pku.edu.cn/mzhang/ds/media/7_String_ADT.rm
第八讲 第3章 字符串——2(模式匹配、KMP算法)  
 http://db.pku.edu.cn/mzhang/ds/media/8_String_KMP.rm
第九讲 第4章 二叉树——1(二叉树的概念和ADT)
http://db.pku.edu.cn/mzhang/ds/media/9_BT_ADT.rm
第十讲 第4章 二叉树——2(二叉树的周游)
 http://db.pku.edu.cn/mzhang/ds/media/10_BT_Trav.rm
第十一讲 第4章二叉树——3(二叉树的非递归后序周游) 
http://db.pku.edu.cn/mzhang/ds/media/11_BT_NonRecPost.rm 
第十二讲 第4章二叉树——4(二叉树的广度周游,二叉树实现和穿线二叉树) 
http://db.pku.edu.cn/mzhang/ds/media/12_BT_BreathThread.rm 
第十三讲 第4章二叉树——5(二叉树的线索化) 
http://db.pku.edu.cn/mzhang/ds/media/15_BT_Thread.rm 
第十四讲 第4章二叉树——6(二叉搜索树) 
http://db.pku.edu.cn/mzhang/ds/media/16_BT_BST.rm
第十五讲 第4章 二叉树——7(堆)
http://db.pku.edu.cn/mzhang/ds/media/19_BT_Heap.rm  
第十六讲 第4章二叉树——8(Huffman树) 
 http://db.pku.edu.cn/mzhang/ds/media/20_BT_Huffman.rm
第十七讲 第5章树——1(树的基本概念和周游) 
http://db.pku.edu.cn/mzhang/ds/media/21_Tree_ADT_Trav.rm
第十八讲 第5章 树——2(树的广度周游和存储)
http://db.pku.edu.cn/mzhang/ds/media/22_Tree_BreathTrav_Store.rm
第十九讲 第5章 树——3(树的 顺序存储、带右链先根)  
http://db.pku.edu.cn/mzhang/ds/media/23_Tree_Seq.rm
第二十讲 第5章 树——4(树的左链层次次序表示,带度数后根,树计数)
 http://db.pku.edu.cn/mzhang/ds/media/24_Tree_Level_PostRoot_Counting.rm
第二十一讲 第6章 图——1(图的概念)
http://db.pku.edu.cn/mzhang/ds/media/25_Graph_Concept.rm 
第二十二讲 第6章图——2(图的存储和周游) 
http://db.pku.edu.cn/mzhang/ds/media/26_Graph_Trav.rm
第二十三讲 第6章 图——3(图的拓扑排序)
  http://db.pku.edu.cn/mzhang/ds/media/29_Graph_TopSort.rm
第二十四讲 第6章图——4(图的单源最短路径Dijstra算法)
 http://db.pku.edu.cn/mzhang/ds/media/30_Graph_Dijstra.rm
第二十五讲 第6章图——5(图的Floyd算法和最小支持树的prim算法) 
http://db.pku.edu.cn/mzhang/ds/media/31_Graph_FloydPrim.rm
第二十六讲 第6章图——6(图的kruskal算法) 
http://db.pku.edu.cn/mzhang/ds/media/32_Graph_Kruskal.rm
第二十七讲 第7章内排序——1(内排序基本概念和插入排序)
http://db.pku.edu.cn/mzhang/ds/media/33_Sort_ConceptIns.rm
第二十八讲 第7章内排序——2(二分插入排序,冒泡排序和shell排序)
http://db.pku.edu.cn/mzhang/ds/media/34_Sort_BinIns_Shell.rm
第二十九讲 第7章 内排序——3(快速排序) 
 http://db.pku.edu.cn/mzhang/ds/media/35_Sort_QS.rm
第三十讲 第7章内排序——4(归并排序) 
http://db.pku.edu.cn/mzhang/ds/media/36_Sort_Merge.rm  
第三十一讲 第7章 内排序——5(堆排序 、桶式排序)
 http://db.pku.edu.cn/mzhang/ds/media/37_Sort_Heap_Bin.rm
第三十二讲 第7章 内排序——6(基数排序)  
http://db.pku.edu.cn/mzhang/ds/media/38_Sort_Radix.rm
第三十三讲 第7章内排序——7(总结、地址排序) 
 http://db.pku.edu.cn/mzhang/ds/media/39_40_Sort_Conclusion_Addr.rm
第三十四讲 第8章文件管理和外排序——1(文件的基本概念)
http://db.pku.edu.cn/mzhang/ds/media/41_File_Concept.rm
第三十五讲 第8章文件管理和外排序——2(置换选择排序、二路归并、选择树)  
http://db.pku.edu.cn/mzhang/ds/media/42_File_ReplaceSort_SelTree.rm
第三十六讲 第8章 文件管理和外排序——3(败方树,多路归并)  
 http://db.pku.edu.cn/mzhang/ds/media/43_File_SelTreeAlg.rm
第三十七讲 第9章 检索——1(检索的基本概念,顺序检索)  
http://db.pku.edu.cn/mzhang/ds/media/44_Search_Concept_Seq.rm
第三十八讲 第9章 检索——2(集合检索,散列函数,开散列法)  
http://db.pku.edu.cn/mzhang/ds/media/45_Search_Set_Hash_Func_Openlink.rm
第三十九讲 第9章 检索——3(闭散列,探测算法)  
 http://db.pku.edu.cn/mzhang/ds/media/46_Search_Hash_Close_Alg.rm
第四十讲 第10章索引——1(索引基本概念,线性索引,倒排索引) 
http://db.pku.edu.cn/mzhang/ds/media/47_Index_Conc_Seq_InvertedInd.rm
第四十一讲 第10章 索引——2(B树,B+树)
 http://db.pku.edu.cn/mzhang/ds/media/48_Index_BTree_BPTreeIntro.rm  
第四十二讲 第10章 索引——3(B+树,索引的性能分析) 下载rm   
 http://db.pku.edu.cn/mzhang/ds/media/53_54_BP_IndexConclusion.rm
第四十三讲 第11章 高级线性表——1(多维数组,矩阵,广义表,内存管理)下载rm pdf 
 http://db.pku.edu.cn/mzhang/ds/media/55_AdvList_Matrix_GenList_Mem.rm
第四十四讲 第12章高级树结构——1(Trie树,最佳二叉搜索树)
http://db.pku.edu.cn/mzhang/ds/media/56_AdvTree_Trie_BestBST.rm
第四十五讲 第12章 高级树结构——2(AVL树)
http://db.pku.edu.cn/mzhang/ds/media/57_AdvTree_AVL.rm  
第四十六讲 第12章 高级树结构——3(AVL树的效率,自组织数据结构,伸展树,决策树)
http://db.pku.edu.cn/mzhang/ds/media/58_AdvTree_AVLAnalysis_SpatialDS_Decision.rm 
posted @ 2012-05-29 23:03 Eric_jiang 阅读(7045) | 评论 (23)编辑 收藏

第一讲
第1章 概论——1(概念、逻辑结构、存储) 下载rm pdf
第二讲 第1章 概论——2(存储结构,ADT,算法特征,算法量度) 下载rm
第三讲 第2章 线性表、栈和队列——1(线性表ADT和存储结构)
下载rm pdf
第四讲 2章 线性表、栈和队列——2(栈的存储和应用)
下载rm
第五讲 2章 线性表、栈和队列——3(栈和表达式,栈和递归)
下载rm  
第六讲 2章 线性表、栈和队列——4(栈和递归,队列)
下载rm
第七讲 3章 字符串——1(字符串概念、ADT、简单模式匹配)
下载rm pdf
第八讲 3章 字符串——2(模式匹配、KMP算法)
下载rm
第九讲 4章 二叉树——1(二叉树的概念和ADT)
下载rm pdf
第十讲 4章 二叉树——2(二叉树的周游) 下载rm
第十一讲 4章 二叉树——3(二叉树的非递归后序周游) 下载rm
第十二讲 4章 二叉树——4(二叉树的广度周游,二叉树实现和穿线二叉树) 下载rm
第十三讲 4章 二叉树——5(二叉树的线索化) 下载rm
第十四讲 4章 二叉树——6(二叉搜索树) 下载rm
第十五讲 4章 二叉树——7(堆) 下载rm
第十六讲 4章 二叉树——8(Huffman树) 下载rm
第十七讲 第5章 树——1(树的基本概念和周游) 下载rm pdf
第十八讲 第5章 树——2(树的广度周游和存储) 下载rm
第十九讲 第5章 树——3(树的 顺序存储、带右链先根) 下载rm
第二十讲 第5章 树——4(树的 左链层次次序表示,带度数后根,树计数) 下载rm
第二十一讲 第6章 图——1(图的概念) 下载rm pdf
第二十二讲 第6章 图——2(图的存储和周游) 下载rm
第二十三讲 第6章 图——3(图的拓扑排序) 下载rm
第二十四讲 第6章 图——4(图的单源最短路径Dijstra算法) 下载rm
第二十五讲 第6章 图——5(图的Floyd算法和最小支持树的prim算法) 下载rm
第二十六讲 第6章 图——6(图的kruskal算法) 下载rm
第二十七讲 第7章 内排序——1(内排序基本概念和插入排序) 下载rm pdf
第二十八讲 第7章 内排序——2(二分插入排序,冒泡排序和shell排序) 下载rm
第二十九讲 第7章 内排序——3(快速排序) 下载rm  
第三十讲 第7章 内排序——4(归并排序) 下载rm  
第三十一讲 第7章 内排序——5(堆排序 、桶式排序) 下载rm  
第三十二讲 第7章 内排序——6(基数排序) 下载rm  
第三十三讲 第7章 内排序——7(总结、地址排序) 下载rm  
第三十四讲 第8章 文件管理和外排序——1(文件的基本概念) 下载rm pdf
第三十五讲 第8章 文件管理和外排序——2(置换选择排序、二路归并、选择树) 下载rm  
第三十六讲 第8章 文件管理和外排序——3(败方树,多路归并) 下载rm  
第三十七讲 第9章 检索——1(检索的基本概念,顺序检索) 下载rm pdf
第三十八讲 第9章 检索——2(集合检索,散列函数,开散列法) 下载rm  
第三十九讲 第9章 检索——3(闭散列,探测算法) 下载rm  
第四十讲 第10章 索引——1(索引基本概念,线性索引,倒排索引) 下载rm pdf
第四十一讲 第10章 索引——2(B树,B+树) 下载rm  
第四十二讲 第10章 索引——3(B+树,索引的性能分析) 下载rm  
第四十三讲 第11章 高级线性表——1(多维数组,矩阵,广义表,内存管理) 下载rm pdf
第四十四讲 第12章 高级树结构——1(Trie树,最佳二叉搜索树) 下载rm pdf
第四十五讲 第12章 高级树结构——2(AVL树) 下载rm  
第四十六讲 第12章 高级树结构——3(AVL树的效率, 自组织数据结构,伸展树,决策树) 下载rm
posted @ 2012-05-29 23:02 Eric_jiang 阅读(3022) | 评论 (2)编辑 收藏

posted @ 2012-05-25 14:57 Eric_jiang 阅读(349) | 评论 (1)编辑 收藏

posted @ 2012-05-24 15:55 Eric_jiang 阅读(222) | 评论 (0)编辑 收藏

 多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个数据元素可能有多个直接前驱和多个直接后继。

多维数组

1、数组(向量)——常用数据类型

     一维数组(向量)是存储于计算机的连续存储空间中的多个具有统一类型的数据元素。
     同一数组的不同元素通过不同的下标标识。
       (a1,a2,…,an)

2、二维数组
     二维数组Amn可视为由m个行向量组成的向量,或由n个列向量组成的向量。
     
     二维数组中的每个元素aij既属于第i行的行向量,又属于第j列的列向量。

3、多维数组
     三维数组Amnp可视为以二维数组为数据元素的向量。四维数组可视为以三维数组为数据元素的向量……
     三维数组中的每个元素aijk都属于三个向量。四维数组中的每个元素都属于四个向量……

4、数组的顺序存储方式
     由于计算机内存是一维的,多维数组的元素应排成线性序列后存人存储器。
     数组一般不做插入和删除操作,即结构中元素个数和元素间关系不变化。一般采用顺序存储方法表示数组。
(1)行优先顺序
     将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。
  【例】二维数组Amn的按行优先存储的线性序列为:
    a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn

  注意:
     ①PASCAL和C语言中,数组按行优先顺序存储。
     ②行优先顺序推广到多维数组,可规定为先排最右的下标。

(2)列优先顺序
     将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。
  【例】二维数组Amn的按列优先存储的线性序列为:
    a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn

  注意:
     
①FORTRAN语言中,数组按列优先顺序存储。
     ②列优先顺序推广到多维数组,可规定为先排最左的下标。

5、数组元素的地址计算公式
(1)按行优先顺序存储的二维数组Amn地址计算公式
        LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d
    其中:
  ①LOC(a11)是开始结点的存放地址(即基地址)
  ②d为每个元素所占的存储单元数
  ③由地址计算公式可得,数组中任一元素可通过地址公式在相同时间内存取。即顺序存储的数组是随机存取结构。

(2)按列优先顺序存储的二维数组Amn地址计算公式
          LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d

(3)按行优先顺序存储的三维数组Amnp地址计算公式
      LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d

(4)下界不为1的二维数组的地址计算公式

  ①二维数组A[c1..d1,c2..d2]的地址计算公式:
      LOC(aij)=LOC(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
  ②下界为0的二维数组的地址计算公式(C语言中使用)
      LOC(aij)=LOC(a00)+[i×(d2+1)+j]×d
   注意:
     以下讨论的数组存储结构都以C语言下标表示。
posted @ 2012-05-21 17:07 Eric_jiang 阅读(906) | 评论 (4)编辑 收藏

#include <iostream>
typedef 
struct __node {
    
int value;
    __node
* next;
}
 NODE, *PNODE;

PNODE reverse(PNODE head) 
{
    
if (!head) {
        
return head;
    }

    PNODE curNode 
= head;
    PNODE nextNode 
= head->next;
    head
->next = NULL;
    
while (nextNode) {

        PNODE afterNextNode 
= nextNode->next;
        nextNode
->next = curNode;
        curNode 
= nextNode;
        nextNode 
= afterNextNode;
    }

    
return curNode;
}

PNODE reverse_recursionA(PNODE head) 
{
    
if (head == NULL || head->next == NULL) {

        
return head;
    }

    PNODE temp 
= reverse_recursionA(head->next);
    head
->next = temp->next;
    temp
->next = head;
    
return head;
}

PNODE reverse_recursionB(PNODE head) 
{
    
if (head == NULL || head->next == NULL) {

        
return head;
    }

    PNODE temp 
= reverse_recursionB(head->next);
    head
->next->next = head;
    
return temp;
}

PNODE reverse_recursionC(PNODE cur, PNODE pre) 
{
    
if (NULL == cur) {

        
return pre;
    }

    PNODE temp 
= cur->next;
    cur
->next = pre;
    
return reverse_recursionC(temp, cur);
}

void printList(PNODE head) {
    PNODE curNode 
= head;
    
while (curNode) {

        std::cout 
<< curNode->value << ' ' << std::flush;

        curNode 
= curNode->next;
    }

    std::cout 
<< std::endl;
}

int main() {
    PNODE head 
= new NODE();
    head
->value = 0;
    head
->next = NULL;
    PNODE tail 
= head;
    
for (int index = 1; index != 100++index) {

        PNODE newNode 
= new NODE();
        newNode
->value = index;
        newNode
->next = head;
        head 
= newNode;
    }

    std::cout 
<< "Original: " << std::endl;
    printList(head);
    head 
= reverse(head);
    std::cout 
<< "After reverse: " << std::endl;
    printList(head);
    tail 
= head;
    head 
= reverse_recursionB(head);
    tail
->next = NULL;
    std::cout 
<< "After one reverse_recrusionB: " << std::endl;
    printList(head);
    reverse_recursionA(head);
    PNODE temp 
= head;
    head 
= tail;
    tail 
= temp;
    std::cout 
<< "After reverse_recursionA: " << std::endl;
    printList(head);
    tail 
= head;
    head 
= reverse_recursionC(head, NULL);
    std::cout 
<< "After reverse_recursionC: " << std::endl;
    printList(head);

    PNODE curNode 
= head;
    
while (curNode) {

        PNODE temp 
= curNode->next;

        delete curNode;

        curNode 
= temp;
    }

    
return 0;
}
posted @ 2012-05-21 16:07 Eric_jiang 阅读(419) | 评论 (0)编辑 收藏

仅列出标题
共57页: First 上一页 29 30 31 32 33 34 35 36 37 下一页 Last