Liny_@NotePad

沉迷ACG中

数据库对象练习

【HR/HR】

1、用学生选课场景创建表:
 1.1
 Student(id,sno,sname,telnum,email)
 Course(id,cno,cname,teachername)
 studentcourse(id,s_id,c_id)

  1. CREATE TABLE student(
  2. id NUMBER,
  3. sno VARCHAR2 (15) NOT NULL,
  4. sname VARCHAR2 (20) NOT NULL,
  5. telnum VARCHAR2 (12),
  6. email VARCHAR2 (50)
  7. );
  8. CREATE TABLE course(
  9. id NUMBER,
  10. cno VARCHAR2 (6) NOT NULL,
  11. cname VARCHAR2 (30) NOT NULL,
  12. teachername VARCHAR2(20)
  13. );
  14. CREATE TABLE studentcourse(
  15. id NUMBER,
  16. s_id NUMBER,
  17. c_id NUMBER
  18. );

SQL练习

【SCOTT/TIGER】

7. 用Decode函数实现横表和竖表的转换

  1. SELECT deptno DEPARTMENT_ID,
  2.        COUNT(*) "部门人数",
  3.        SUM(DECODE(SIGN(sal-9000),-1,0,1)) "超高收入人数(>9000)",
  4.        SUM(DECODE(SIGN(sal-9000),-1,0,( DECODE(SIGN(sal-12000),1,0,1) ) )) "极高收入人数([9000,12000])",
  5.        SUM(DECODE(SIGN(sal-6000),-1,0,( DECODE(SIGN(sal-9000),1,0,1) ) )) "高收入([6000,9000])",
  6.        SUM(DECODE(SIGN(sal-3000),-1,0,( DECODE(SIGN(sal-6000),1,0,1) ) )) "一般收入([3000,6000])",
  7.        SUM(DECODE(SIGN(sal-3000),-1,1,0)) "低收入([<3000])"
  8.   FROM emp
  9.  GROUP BY deptno;

在redhat9.0下安装jdk和tomcat

==========================================
【安装JDK】
------------------------------------------
1. 下载一个bin的jdk

2. 丢到/opt目录下(一般来说放在这里?)

3. 进入目录,修改该文件的权限:
 chmod a+x 文件名.bin

4. 运行该文件:
 ./文件名
 # 于是它就自己安装了啊
 # 等啊等 结束了
 # 在opt目录下生成一个同名的文件夹

5. 打开etc/下的profile文件编辑
 vi /etc/profile

6. 在文件最后加上
 JAVA_HOME=/opt/文件夹名
 CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.
 PATH=$PATH:$JAVA_HOME/bin
 export JAVA_HOME CLASSPATH PATH

7. 使环境变量生效:
 source /etc/profile

8. 测试:
 java -version

求主元素的线性算法

 知道怎么算,实现起来好囧,百度了一下,发现这个好简洁 = =,不过这个输入时就一定有主元素,故没有再对函数找出来的A[x]作判定:

基数排序实现

rt……

求亲密数对

= =

离散集合的find与union操作

 @ _ @

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. #define Type int
  5. #define N 100
  6.  
  7. typedef struct Tree_node {
  8.         struct Tree_node*  parent;
  9.         int rank;
  10.         Type value;
  11. }NODE;
  12.  
  13. NODE* find(NODE *xp){
  14.         NODE *wp, *yp = xp, *zp = xp;
  15.         while(yp->parent){
  16.                 yp = yp->parent;
  17.         }
  18.         while(zp->parent){
  19.                 wp = zp->parent;
  20.                 zp->parent = yp;
  21.                 zp = wp;
  22.         }
  23.         return yp;
  24. }
  25.  
  26. NODE* unionTree(NODE *xp, NODE *yp){
  27.         NODE *up, *vp;
  28.         up = find(xp);
  29.         vp = find(yp);
  30.         if(up->rank<=vp->rank){
  31.                 up->parent = vp;
  32.                 if(up->rank == vp->rank){
  33.                         vp->rank ++;
  34.                 }
  35.                 up = vp;
  36.         }else{
  37.                 vp->parent = up;
  38.         }
  39.         return up;
  40. }
  41.  
  42. NODE* createNode(Type value, NODE* parent = NULL){
  43.         NODE* p = new NODE;
  44.         if(parent){
  45.                 p->rank = parent->rank + 1;
  46.         }else{
  47.                 p->rank = 1;
  48.         }
  49.         p->parent = parent;
  50.         p->value = value;
  51.         return p;
  52. }
  53.  
  54. int main(){
  55.         NODE* A[N];
  56.  
  57.         /* 建立集合{1,2,3,4} */
  58.         A[4] = createNode(4);   
  59.         A[3] = createNode(3,A[4]);     
  60.         A[2] = createNode(2,A[4]);
  61.         A[1] = createNode(1,A[2]);
  62.        
  63.        
  64.  
  65.         /* 建立集合{5,6,7,8} */
  66.         A[8] = createNode(8);   
  67.         A[7] = createNode(7,A[8]);     
  68.         A[6] = createNode(6,A[8]);
  69.         A[5] = createNode(5,A[6]);
  70.  
  71.         /*      合并两集合 */
  72.         unionTree(A[1],A[5]);
  73.  
  74.         /* 遍历集合 */
  75.         for(int i = 1; i<=8; i++){
  76.                 cout<<"结点"<<(A[i]->value)<<" ";
  77.                 if(A[i]->parent)cout<<"父结点"<<(A[i]->parent->value);
  78.                 else cout<<"该结点为根结点";
  79.                 cout<<endl;
  80.         }
  81.  
  82.         return 0;
  83. }

合并堆算法

编写一个算法,把两个相同大小的堆合并成一个堆。

  1. /*
  2. * Title: 编写一个算法,把两个相同大小的堆,合并成一个堆。
  3. * Author: YOYO
  4. * Time: 2009-3-8
  5. *
  6. * 合并算法即其中的merge_heaps(Type A[], Type B[], Type C[], int n)
  7. * 该算法将两个相同大小的堆A和B合并为一个大顶堆,并存储到C中。时间复杂度为O(n*log(n))
  8. *
  9. */
  10. #include<iostream>
  11. using namespace std;
  12.  
  13. #define Type int
  14. #define N 100
  15.  
  16. void shift_up(Type H[], int i);
  17. void shift_down(Type H[], int n, int i);
  18. void insert(Type H[], int &n, Type x);
  19. void del(Type H[], int &n, int i);
  20. Type delete_max(Type H[], int &n);
  21. void print_heap(Type H[], int n);
  22. void make_heap(Type H[], int n);
  23. void heap_sort(Type H[], int n);
  24. void merge_heaps(Type A[], Type B[], int n);
  25.  
  26. void shift_up(Type H[], int i){
  27.         bool done = false;
  28.         while(i!=1){
  29.                 if(H[i]<=H[i/2]){
  30.                         break;
  31.                 }
  32.                 swap(H[i], H[i/2]);
  33.                 i /= 2;
  34.         }
  35. }
  36.  
  37. void shift_down(Type H[], int n, int i){
  38.         bool done = false;
  39.         while( (i=2*i)<=n ){
  40.                 if(i+1<=n&&H[i+1]>H[i]){
  41.                         i ++;
  42.                 }
  43.                 if(H[i/2]>=H[i]){
  44.                         break;
  45.                 }
  46.                 swap(H[i/2], H[i]);
  47.         }
  48. }
  49.  
  50. void insert(Type H[], int &n, Type x){
  51.         n++;
  52.         H[n] = x;
  53.         shift_up(H,n);
  54. }
  55.  
  56. void del(Type H[], int &n, int i){
  57.         Type x, y;
  58.         x = H[i], y = H[n];
  59.         n--;
  60.         if(i<=n){
  61.                 H[i] = y;
  62.                 if(y>=x){
  63.                         shift_up(H,i);
  64.                 }else{
  65.                         shift_down(H,n,i);
  66.                 }
  67.         }
  68. }
  69.  
  70. Type delete_max(Type H[], int &n){
  71.         Type x = H[1];
  72.         del(H, n, 1);
  73.         return x;
  74. }
  75.  
  76. void heap_sort(Type H[], int n){
  77.         make_heap(H,n);
  78.         for( int i = n; i>1; i--){
  79.                 swap(H[1],H[i]);
  80.                 shift_down(H,i-1,1);
  81.         }
  82. }
  83.  
  84. void print_heap(Type H[], int n){
  85.         for( int i = 1, j = 1; i<=n; i++){
  86.                 printf("%-4d",H[i]);
  87.                 if((i+1)%j==0){
  88.                         cout<<endl;
  89.                         j*=2;
  90.                 }
  91.         }
  92.         cout<<endl;
  93.         if(i%j)cout<<endl;
  94. }
  95.  
  96. void make_heap(Type H[], int n){
  97.         H[n] = H[0];
  98.         for( int i= n/2; i>=1; i--){
  99.                 shift_down(H,n,i);
  100.         }
  101. }
  102.  
  103. /*
  104. *      合并堆算法
  105. *
  106. *      输入:堆A,堆B,堆的长度n
  107. *      输出:由堆A和堆B合并成的新大顶堆C
  108. *
  109. *      该算法执行了2n次时间复杂度为O(log(n))的insert操作,故
  110. *      它的执行时间为O(n*log(n))
  111. *
  112. */
  113. void merge_heaps(Type A[], Type B[], Type C[], int n){
  114.         int i,k;
  115.         for(i=1, k = 0; i<=n; i++){
  116.                 insert(C, k, A[i]);
  117.         }
  118.         for(i=1, k = n; i<=n; i++){
  119.                 insert(C, k, B[i]);
  120.         }
  121. }
  122.  
  123. int main(){
  124.         int i,n;
  125.         Type A[N],B[N],C[2*N];
  126.  
  127.         /*      输入堆的元素 */
  128.         cout<<"请输入堆的元素个数:";
  129.         cin>>n;
  130.  
  131.         cout<<"请输入堆A的元素:";
  132.         for(i = 0; i<n; i++){
  133.                 cin>>A[i];
  134.         }
  135.  
  136.         cout<<"请输入堆B的元素:";
  137.         for(i = 0; i<n; i++){
  138.                 cin>>B[i];
  139.         }
  140.  
  141.         /*      建堆 */
  142.         make_heap(A,n);
  143.         make_heap(B,n);
  144.  
  145.         /*      打印堆*/
  146.         cout<<"大顶堆A:"<<endl;
  147.         print_heap(A,n);
  148.  
  149.         cout<<"大顶堆B:"<<endl;
  150.         print_heap(B,n);
  151.  
  152.         /*      合并堆 */
  153.         merge_heaps(A,B,C,n);
  154.  
  155.         /*      打印堆*/
  156.         cout<<"合并后的大顶堆C:"<<endl;
  157.         print_heap(C,2*n);
  158.  
  159.         return 0;
  160. }