• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天之道

            享受編程的樂趣。
            posts - 118, comments - 7, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            #include<stdio.h>
            void swap(int *a,int *b)
            {
                
            int tmp;
                tmp
            =*a;
                
            *a=*b;
                
            *b=tmp;
            }

            void quicksort(int k[],int s,int t)
            {
                
            int i,j;
                
            if(s<t)
                {
                    i
            =s;
                    j
            =t+1;
                    
            while(1)
                    {
                        
            do i++;
                        
            while(!(k[s]>=k[i] || i==t));//重復(fù)執(zhí)行i++操作
                        do j--;
                        
            while(!(k[s]<=k[j] || j==s));//重復(fù)執(zhí)行j--操作

                        
            if(i<j)
                            swap(
            &k[i],&k[j]); //交換k[i]和k[j]的位置
                        else
                            
            break;
                    }
                    swap(
            &k[s],&k[j]);   //交換基準(zhǔn)元素與k[j]的位置
                    quicksort(k,s,j-1);  //遞歸排序基準(zhǔn)元素前面的子序列
                    quicksort(k,j+1,t);  //遞歸排序基準(zhǔn)元素后面的子序列
                }
            }

            int main()
            {
                
            int k[10]={2,5,6,3,7,8,0,9,12,1},i;
                printf(
            "The orginal data array is\n");
                
            for(i=0;i<10;i++)
                    printf(
            "%d ",k[i]);
                quicksort(k,
            0,9);  //從大到小排序
                printf("\nThe result of quick sorting for the array is\n");
                
            for(i=0;i<10;i++)
                    printf(
            "%d ",k[i]);
                
            return 0;
            }

            posted @ 2012-03-04 17:14 hoshelly 閱讀(173) | 評(píng)論 (0)編輯 收藏

            //希爾排序算法思想:縮小增量gap->劃分序列->將每個(gè)子序列排序
            #include<stdio.h>
            void shellsort(int k[],int n)
            {
                
            int i,j,flag,gap=n;
                
            int tmp;
                
            while(gap>1)
                {
                    gap
            =gap/2;
                    
            do{
                        flag
            =0;
                        
            for(i=1;i<=n-gap;i++)
                        {
                            j
            =i+gap;
                            
            if(k[i]<k[j])
                            {
                                tmp
            =k[i];
                                k[i]
            =k[j];
                                k[j]
            =tmp;
                                flag
            =1;
                            }
                        }
                    }
            while(flag!=0);
                }
            }

            int main()
            {
                
            int i,a[11]={-111,2,5,6,3,7,8,0,9,12,1};
                printf(
            "The orginal data array is\n");
                
            for(i=1;i<=10;i++)
                    printf(
            "%d ",a[i]);

                shellsort(a,
            10);

                printf(
            "\nThe result of Shell's sorting for the array is\n");//從大到小排序
                for(i=1;i<=10;i++)
                    printf(
            "%d ",a[i]);
                
            return 0;
            }

            posted @ 2012-03-04 16:13 hoshelly 閱讀(255) | 評(píng)論 (0)編輯 收藏

            #include<stdio.h>
            int insertsort(int a[],int n)//直接排序法
            {
                
            int i,j;
                
            for(i=2;i<=n;i++)
                {
                    a[
            0]=a[i]; //a[0]作為臨時(shí)變量存儲(chǔ)a[i]
                    j=i-1;
                    
            while(j>0 && a[0]>a[j])//從大到小排列
                        a[j+1]=a[j--];
                    a[j
            +1]=a[0]; //將元素a[0]插入指定位置
                }
                
            return 0;
            }

            int main()
            {
                
            int i,a[11]={-111,2,5,6,3,7,8,0,9,12,1};//a[0]沒有使用
                printf("The orginal data array is\n");
                
            for(i=1;i<=10;i++)
                    printf(
            "%d ",a[i]);
                insertsort(a,
            10);
                printf(
            "\nThe result of insertion sorting for the array is\n");
                
            for(i=1;i<=10;i++)
                    printf(
            "%d ",a[i]);
                printf(
            "\n");
                
            return 0;
            }

            posted @ 2012-03-04 15:19 hoshelly 閱讀(140) | 評(píng)論 (0)編輯 收藏

            #include<stdio.h> //用先序序列創(chuàng)建一棵二叉樹,并輸出字符D位于二叉樹的層數(shù)
            #include<stdlib.h>
            #include
            <conio.h>
            typedef 
            struct BiTNode
            {
                
            char data;
                
            struct BiTNode *lchild,*rchild;
            }BiTNode,
            *BiTree;

            CreatBiTree(BiTree 
            *T)
            {
                
            char c;
                scanf(
            "%c",&c);
                
            if(c == ' '*T=NULL; //如果輸出的是空格,則表示創(chuàng)建的子樹結(jié)束
                else
                {
                    
            *T=(BiTNode*)malloc(sizeof(BiTNode)); //創(chuàng)建根結(jié)點(diǎn)
                    (*T)->data=c; //向根結(jié)點(diǎn)中輸入數(shù)據(jù)
                    CreatBiTree(&((*T)->lchild)); //遞歸地創(chuàng)建左子樹
                    CreatBiTree(&((*T)->rchild)); //遞歸地創(chuàng)建右子樹
                }
            }
            //訪問二叉樹結(jié)點(diǎn),輸出包含D字符結(jié)點(diǎn)位于二叉樹中的層數(shù)
            visit(char c,int level)
            {
                
            if(c=='D')
                    printf(
            "%c is at %d lever of BiTree\n",c,level);
            }
            PreOrderTraverse(BiTree T,
            int level)
            {
                
            if(T)    //遞歸結(jié)束條件,T為空
                {
                    visit(T
            ->data,level);//訪問根結(jié)點(diǎn)
                    PreOrderTraverse(T->lchild,level+1);
                    PreOrderTraverse(T
            ->rchild,level+1);
                }
            }

            int main()
            {
                
            int level=1;
                BiTree T
            =NULL; //最開始T指向空
                CreatBiTree(&T);
                PreOrderTraverse(T,level);
                getche();
                
            return 0;
            }

            posted @ 2012-03-03 20:05 hoshelly 閱讀(2245) | 評(píng)論 (0)編輯 收藏

            //隊(duì)列的基本操作:實(shí)現(xiàn)一個(gè)鏈隊(duì)列,任意輸入一串字符,以@為結(jié)束標(biāo)志,然后將隊(duì)列中的元素逐一取出,打印在屏幕上
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <conio.h>
            typedef 
            char ElemType;
            typedef 
            struct QNode
            {
                ElemType data;
                
            struct QNode *next;
            }QNode,
            *QueuePtr;
            typedef 
            struct{
                QueuePtr front; 
            //隊(duì)頭指針
                QueuePtr rear;  //隊(duì)尾指針
            }LinkQueue;

            initQueue(LinkQueue 
            *q) //創(chuàng)建一個(gè)頭結(jié)點(diǎn),隊(duì)頭隊(duì)尾指針指向該結(jié)點(diǎn)
            {
                q
            ->front=q->rear=(QueuePtr)malloc(sizeof(QNode));

                
            if(!q->front) exit(0);
                q
            ->front->next=NULL;
            }

            EnQueue(LinkQueue 
            *q,ElemType e)
            {
                QueuePtr p;
                p
            =(QueuePtr)malloc(sizeof(QNode));
                
            if(!q->front) exit(0);
                p
            ->data=e;      //數(shù)據(jù)e入列
                p->next=NULL;
                q
            ->rear->next=p;
                q
            ->rear=p;
            }

            DeQueue(LinkQueue 
            *q,ElemType *e)//如果隊(duì)列q不為空,刪除q的隊(duì)頭元素,用e返回其值
            {
                QueuePtr p;
                
            if(q->front==q->rear) return//隊(duì)列為空,返回
                p=q->front->next;
                
            *e=p->data;
                q
            ->front->next=p->next;
                
            if(q->rear==p) q->rear=q->front;//如果隊(duì)頭就是隊(duì)尾,則修改隊(duì)尾指針
                free(p);
            }

            int main()
            {
                ElemType e;
                LinkQueue q;
                initQueue(
            &q);
                printf(
            "Please input a string into a queue\n");
                scanf(
            "%c",&e);
                
            while(e!='@')
                {
                    EnQueue(
            &q,e);
                    scanf(
            "%c",&e);
                }
                printf(
            "The string into the queue is\n");
                
            while(q.front!=q.rear)
                {
                    DeQueue(
            &q,&e);
                    printf(
            "%c",e);
                }

                printf(
            "\n");
                getche();
                
            return 0;
            }

            posted @ 2012-03-03 18:42 hoshelly 閱讀(322) | 評(píng)論 (0)編輯 收藏

            //二進(jìn)制轉(zhuǎn)換為十進(jìn)制數(shù)(利用棧的數(shù)據(jù)結(jié)構(gòu))
            #include<stdio.h>
            #include
            <math.h>
            #include
            <stdlib.h>
            #include
            <conio.h>
            #define STACK_INIT_SIZE 20
            #define STACKINCREMENT 10

            typedef 
            char ElemType;
            typedef 
            struct{
                ElemType 
            *base;
                ElemType 
            *top;
                
            int stacksize;
            }sqStack;

            initStack(sqStack 
            *s) //創(chuàng)建一個(gè)棧
            {
                s
            ->base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
                
            if(!s->base)  exit(0);
                s
            ->top=s->base;
                s
            ->stacksize=STACK_INIT_SIZE;
            }
            Push(sqStack 
            *s,ElemType e){
                
            if(s->top-s->base>=s->stacksize){
                    s
            ->base=(ElemType*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
                    
            if(!s->base) exit(0);
                    s
            ->top=s->base+s->stacksize;
                    s
            ->stacksize=s->stacksize+STACKINCREMENT;
                }
                
            *(s->top)=e;
                s
            ->top++;
            }

            Pop(sqStack 
            *s,ElemType *e){
                
            if(s->top==s->basereturn;
                
            *e=*--(s->top);
            }

            int StackLen(sqStack s){ //計(jì)算棧的當(dāng)前容量
                return (s.top-s.base);
            }

            int main()
            {
                ElemType c;
                sqStack s;   
            //
                int len,i,sum=0;
                printf(
            "Please input a Binary digit\n");

                initStack(
            &s);
                
            //輸入0/1字符表示的二進(jìn)制數(shù),以#結(jié)束

                scanf(
            "%c",&c);
                
            while(c!='#')
                {
                    Push(
            &s,c);
                    scanf(
            "%c",&c);
                }
                getchar();
                len
            =StackLen(s);

                
            for(i=0;i<len;i++)
                {
                    Pop(
            &s,&c);
                    sum
            =sum+(c-48)*pow(2,i);//c-48是為了得到該字符對(duì)應(yīng)的0/1值,這是因?yàn)樽址?的ASCII碼為48
                }
                printf(
            "Decimal is %d\n",sum);
                getche();
                
            return 0;
            }


            //清空一個(gè)棧 代碼
            ClearStack(sqStack *s)
            {
                s
            ->top=s->base;
            }

            //銷毀一個(gè)棧 代碼

            DestroyStack(sqStack 
            *s)
            {
                
            int i,len;
                len
            =s->stacksize;
                
            for(i=0;i<len;i++)
                {
                    free(s
            ->base);
                    s
            ->base++;
                }
                s
            ->base=s->top=NULL;
                s
            ->stacksize=0;
            }

            posted @ 2012-03-03 14:06 hoshelly 閱讀(675) | 評(píng)論 (0)編輯 收藏

            描述

            Fibonacci數(shù)列:0,1,1,2,3,5,8,13,21,…
            從0開始,后續(xù)的數(shù)具有這樣的性質(zhì):當(dāng)前的數(shù)是其前面兩個(gè)數(shù)之和。編寫一個(gè)函數(shù)計(jì)算第n個(gè)Fibonacci數(shù)。規(guī)定:Fibonacci(1)=1,fibonacci(2)=1。

            輸入

            第一行1個(gè)整數(shù)t,表示有t組數(shù)據(jù)。以下t行,每行一個(gè)整數(shù)n。

            輸出

            共t行,對(duì)于每個(gè)n,輸出第n個(gè)Fibonacci數(shù)(結(jié)果不超過long int的范圍)。

            樣例輸入
            2 3 5
            樣例輸出
            2 5
            int main()
            {
                
            int t,i=0;
                
            int a[10];
                scanf(
            "%d",&t);
                
            while(t--)
                {
                        
            int pre=1,next=1,result=1;
                        scanf(
            "%d",&a[i]);
                        
            while(a[i]>2)
                        {
                            a[i]
            --;
                            next
            =pre;
                            pre
            =result;
                            result
            =pre+next;
                        }
                        printf(
            "%d\n",result);
                        i
            ++;
                }
                
            return 0;
            }

            posted @ 2012-03-01 22:16 hoshelly 閱讀(512) | 評(píng)論 (0)編輯 收藏

            描述

            “回文”是一種特殊的數(shù)或者文字短語。他們無論是順讀還是倒讀,結(jié)果都一樣。例如:12321, 55555,45554。讀入一個(gè)5位整數(shù),判斷它是否是回文數(shù)。

            輸入

            多組測試數(shù)據(jù),每組一行,一個(gè)五位整數(shù),數(shù)據(jù)以0結(jié)尾。

            輸出

            對(duì)每組輸入數(shù)據(jù)輸出一行,如果輸入數(shù)是回文數(shù),輸出“Yes.” ,否則輸出 “No.” 。

            樣例輸入
            12345 12321 11111 0
            樣例輸出
            No. Yes. Yes. 


             源代碼如下,注意循環(huán)長度為(length/2+1)。

            #include<stdio.h>
            #include
            <string.h>
            #include 
            <stdlib.h>
            int main()
            {
                
            int n,length,i=0,c;
                
            char str[6];
                
            while(scanf("%d",&n)!=EOF)
                {
                    
            if(n==0)
                        exit(
            1);
                    c
            =0;
                    sprintf(str,
            "%d",n);
                    length
            =strlen(str);
                    
            for(i=0;i<(length/2+1);i++)
                    {
                        
            if(str[i]==str[length-i-1])
                            c
            ++;
                        
            else
                            
            break;
                    }
                    
            if(c==3)
                        printf(
            "Yes.\n");
                    
            else
                        printf(
            "No.\n");
                }
                
            return 0;
            }

            posted @ 2012-03-01 20:10 hoshelly 閱讀(1145) | 評(píng)論 (0)編輯 收藏

            要求:從終端輸入一組整數(shù)(大于10),以0作為結(jié)束標(biāo)志,將這一組整數(shù)存放在一個(gè)鏈表中(結(jié)束標(biāo)志0不包括在內(nèi)),打印出該鏈表中的值。然后刪除該鏈表的第5個(gè)元素,打印出刪除后的結(jié)果。最后在內(nèi)存中釋放掉該鏈表。
            源程序如下:

            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <conio.h>
            typedef 
            int ElemType;
            typedef 
            struct node{
                ElemType data;
                
            struct node *next;
            }LNode,
            *LinkList;

            LinkList GreatLinkList(
            int n){
                LinkList p,r,list
            =NULL;
                ElemType e;
                
            int i;
                
            for(i=1;i<=n;i++)
                {
                    scanf(
            "%d",&e);
                    p
            =(LinkList)malloc(sizeof(LNode));
                    p
            ->data=e;
                    p
            ->next=NULL;
                    
            if(!list)
                        list
            =p; //如果list為空,則說明本次生成的結(jié)點(diǎn)為第一個(gè)結(jié)點(diǎn),將p賦給list
                    else
                        r
            ->next=p;//否則將p賦給r->next,這里r永遠(yuǎn)指向原先鏈表的最后一個(gè)結(jié)點(diǎn),也就是要插入結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)
                    r=p;
                }
                
            return list;//返回鏈表頭指針
            }

            void insertList(LinkList *list,LinkList q,ElemType e)
            {
                LinkList p;
                p
            =(LinkList)malloc(sizeof(LNode));
                p
            ->data=e;
                
            if(!*list){ //當(dāng)鏈表為空時(shí),將p賦給list,p的next域的值置為空
                    *list=p;
                    p
            ->next=NULL;
                }
                
            else
                {
                    p
            ->next=q->next;//q為插入指針指向的結(jié)點(diǎn)
                    q->next=p;
                }
            }

            void delLink(LinkList *list,LinkList q){
                LinkList r;
                
            if(q==*list)//如果刪除第一個(gè)結(jié)點(diǎn)
                {
                    
            *list=q->next;
                    free(q);
                }
                
            else //刪除其他結(jié)點(diǎn)
                {
                    
            for(r=*list;r->next!=q;r=r->next);//當(dāng)q所指向的結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)的指針未知時(shí),需要先通過鏈表頭指針list遍歷鏈表,
                                                       
            //找到q的前驅(qū)結(jié)點(diǎn)的指針,并把該指針賦值給指針變量r
                    if(r->next!=NULL){
                        r
            ->next=q->next;
                        free(q);
                    }
                }
            }

            void destroyLinkList(LinkList *list){
                LinkList p,q;
                p
            =*list;
                
            while(p)//循環(huán)釋放掉每個(gè)鏈表結(jié)點(diǎn)
                {
                    q
            =p->next;
                    free(p);
                    p
            =q;
                }
                
            *list=NULL;//將該鏈表完全置空,防止list變成野指針
            }

            void main()
            {
                
            int e,i;
                LinkList l,q;
                q
            =l=GreatLinkList(1);//創(chuàng)建鏈表一個(gè)結(jié)點(diǎn),q和l指向該結(jié)點(diǎn)
                scanf("%d",&e);
                
            while(e) //循環(huán)輸入數(shù)據(jù),同時(shí)插入新生成的結(jié)點(diǎn)
                {
                    insertList(
            &l,q,e);
                    q
            =q->next;
                    scanf(
            "%d",&e);
                }
                q
            =l;
                printf(
            "The content of the linklist\n");
                
            while(q) //輸出鏈表中的內(nèi)容
                {
                    printf(
            "%d ",q->data);
                    q
            =q->next;
                }
                q
            =l;
                printf(
            "\nDelete teh fifthe element\n");
                
            for(i=0;i<4;i++)
                {
                    q
            =q->next;
                }
            //將指針q指向鏈表的第5個(gè)元素

                delLink(
            &l,q);
                q
            =l;
                
            while(q)
                {
                    printf(
            "%d ",q->data);
                    q
            =q->next;
                }
                destroyLinkList(
            &l);
                getche();
            //輸入后立即從控制臺(tái)取字符,不以回車為結(jié)束(帶回顯)
            }

            posted @ 2012-03-01 11:49 hoshelly 閱讀(430) | 評(píng)論 (0)編輯 收藏

            要求:順序表初始長度為10,向順序表中輸入15個(gè)整數(shù),并打印出來;再刪除順序表中的第5個(gè)元素,打印出刪除后的結(jié)果。
            #include<stdio.h>
            #include
            <conio.h>
            #include
            <stdlib.h>
            #define MaxSize 10
            typedef 
            int ElemType;
            typedef 
            struct{
                
            int *elem;
                
            int length;
                
            int listsize;
            } Sqlist;
            //初始化一個(gè)順序表
            void initSqlist(Sqlist *L)
            {
                L
            ->elem=(int*)malloc(MaxSize*sizeof(ElemType));
                
            if(!L->elem) exit(0);
                L
            ->length=0;
                L
            ->listsize=MaxSize;
            }

            void InsertElem(Sqlist *L,int i,ElemType item){
                ElemType 
            *base,*insertPtr,*p;
                
            if(i<1||i>L->length+1)exit(0);
                
            if(L->length>=L->listsize)
                {
                    
            base=(ElemType*)realloc(L->elem,(L->listsize+10)*sizeof(ElemType));
                    L
            ->elem=base;
                    L
            ->listsize=L->listsize+100;
                }
                insertPtr
            =&(L->elem[i-1]);
                
            for(p=&(L->elem[L->length-1]);p>=insertPtr;p--)
                    
            *(p+1)=*p;
                
            *insertPtr=item;
                L
            ->length++;
            }

            void DelElem(Sqlist *L,int i)
            {
                ElemType 
            *delItem,*q;
                
            if(i<1||i>L->length) exit(0);
                delItem
            =&(L->elem[i-1]);
                q
            =L->elem+L->length-1;
                
            for(++delItem;delItem<=q;++delItem)*(delItem-1)=*delItem;
                L
            ->length--;
            }

            void main()
            {
                Sqlist l;
                
            int i;
                initSqlist(
            &l);
                
            for(i=0;i<15;i++)
                    InsertElem(
            &l,i+1,i+1);
                printf(
            "\nThe content of the list is\n");
                
            for(i=0;i<l.length;i++)
                    printf(
            "%d",l.elem[i]);
                DelElem(
            &l,5);
                printf(
            "\nDelete the fifth element\n");
                
            for(i=0;i<l.length;i++)
                    printf(
            "%d",l.elem[i]);
                getche();
            }

            posted @ 2012-03-01 01:41 hoshelly 閱讀(352) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共12頁: First 4 5 6 7 8 9 10 11 12 
            国产精品伊人久久伊人电影| 色狠狠久久综合网| 久久91精品国产91久久小草| 免费观看久久精彩视频| 久久亚洲中文字幕精品一区四| 奇米影视7777久久精品人人爽| 精品综合久久久久久888蜜芽| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久无码人妻一区二区三区| 91精品久久久久久无码| 伊人久久大香线焦AV综合影院| 波多野结衣中文字幕久久| 亚洲午夜精品久久久久久app| 精品久久久久久无码中文字幕一区| 国产成人久久精品麻豆一区| 久久99精品久久久久久久久久| 欧美伊人久久大香线蕉综合69| 国产亚洲综合久久系列| 亚洲AV日韩AV天堂久久| 亚洲精品成人网久久久久久| 亚洲国产精久久久久久久| 色婷婷综合久久久中文字幕 | 狠狠色婷婷久久综合频道日韩 | 99精品国产在热久久| 久久精品国产亚洲av麻豆蜜芽| 欧美亚洲另类久久综合婷婷| 91久久香蕉国产熟女线看| 国内精品伊人久久久久av一坑| 日本久久久久亚洲中字幕| 男女久久久国产一区二区三区| 久久久久久久久久久久久久| 久久久久久国产a免费观看黄色大片| 久久99精品国产99久久6| 国产视频久久| 久久久免费观成人影院| 久久天天日天天操综合伊人av| 久久久久香蕉视频| 亚洲精品高清一二区久久| 欧美性大战久久久久久| 久久久亚洲欧洲日产国码是AV| 亚洲国产精品无码久久久不卡|