線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:773
推到 Plurk!
推到 Facebook!

[C++] [問題] 程式不知道哪裡寫錯了 麻煩幫看

 
harryGod
一般會員


發表:16
回覆:19
積分:7
註冊:2004-12-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-12 12:04:26 IP:61.231.xxx.xxx 未訂閱
題目:以struct做2物件stack,之後以linked list方式做堆疊排序  一個數字慢慢輸入 直到輸入-1做停止 譬如:      原本要輸入1324 input: 1 3 2 4 -1 停止 output: 1234    code: #include #include using namespace std; struct node { int data; node *next; }; node *push(node *s1,node *s2,int data); node *push2(node *s2,int data); node *pop(node *s1,node *s2); void main() { node *s1=NULL,*s2=NULL; int data; while(data!=(-1)) { cin>>data; s1=push(s1,s2,data); } while(s2) s1=pop(s1,s2); while(s1) { cout<data; delete s1; s1=s1->next; } system("pause"); } node *push(node *s1,node *s2,int data) { if(data>s1->data) { s2=push2(s2,s2->data); s1->data=data; return s1; } else { node *link=new node; link->data=data; link->next=s1; s1=link; return s1; } } node *push2(node *s2,int data) { node *link=new node; link->data=data; link->next=s2; s2=link; return s2; } node *pop(node *s1,node *s2) { node *link=new node; link->data=s2->data; delete s2; s2=s2->next; return s2; } 麻煩好心人 幫幫忙@@ 發表人 - harryGod 於 2005/03/12 12:38:09
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-12 13:05:33 IP:59.104.xxx.xxx 未訂閱
1.你的問題是什麼? 它在那邊出錯? 在COMPILER期還是在執行期? 2.問問題時要把問題點出來。超過十行的程式要大家幫你慢慢追嗎? 還是你點出你的問題在那邊。讓大家比較快幫你比較合適呢?
harryGod
一般會員


發表:16
回覆:19
積分:7
註冊:2004-12-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-12 13:45:43 IP:61.231.xxx.xxx 未訂閱
我的程式 可以RUN 但是按第一個數字就出錯了 DEBUG後他的游標指向if(data>s1->data)位址好像有問題 還有譬如我一個個輸入1324 push進第一個堆疊後 如果輸入第二個數字進堆疊,第二個數字比原先那一個還大 原先那個則push進第二個堆疊 譬如 NULL s1 NULL s2 input 1 NULL<- 1 s1 NULL s2 input 3 NULL<- 3 s1 NULL<- 1 s2 input 2 NULL<- 3 <- 2 s1 NULL<- 1 s2 input 4 NULL<- 4 s1 NULL<- 1 <- 2 <- 3 s2 最後合併 先把s2pop至s1 NULL<- 4 <- 3 <- 2 <- 1 最後再pop s1 就得到答案 output 1234 在pop合併的過程以及判斷是否要push至s2的過程 小弟寫的不太好 麻煩給些建議 謝謝
psl
一般會員


發表:6
回覆:30
積分:7
註冊:2003-06-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-12 23:21:48 IP:220.143.xxx.xxx 未訂閱
if( data > s1->data ) 這行之所以會出問題 錯誤訊息是提示 Access Violation (我看到的 ^_^) 很明顯的... 你在使用 s1 這個指標時...沒先確定是否為有效的指標啊 第一次用的時候...根本還沒配置好記憶體 s1 = NULL 有用到指標的時候要多注意喔 你先檢查看看...順便自己改一下吧
psl
一般會員


發表:6
回覆:30
積分:7
註冊:2003-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-13 18:49:13 IP:220.143.xxx.xxx 未訂閱
harryGod 你好 以下為做法之一... 用一個堆疊就可以達到你要的結果 如果要用兩個堆疊實作 說真的...我看不懂你的意思 ^_^! 排序是簡單的泡泡排序法...其他排序法翻書或上網都查的到 剩下的你就自己努力吧...加油囉     
#include 
using namespace std;    const int MAX_ITEM = 20;    typedef struct stk
{
      int item[MAX_ITEM];        /*資料欄位*/
      int top;
}STACK;    int is_empty(STACK *S)
{
    if(S->top == -1)
        return(1);
    else
        return(0);
}    int is_full(STACK *S)
{
    if (S->top == (MAX_ITEM-1))
        return(1);
    else
        return(0);
}    void PrintStack(STACK *s)
{
   if  ( is_empty(s) )
      return;
   for (int i=s->top; i >= 0; i--)
      cout << s->item[i] << "  ";
   cout << endl;
}    int PUSH(STACK *S, int X)
{
    if(is_full(S))
        return(0);        S->top = S->top 1;
    S->item[S->top] = X;
    return(1);
}    int POP(STACK *S,int *X)
{
    if(is_empty(S))
        return (0);        *X = S->item[S->top];
    S->top--;
    return(1);
}    void BubbleSort(STACK *s) 
{
        if (s->top == 0)  // only one integer in the stack
                return;            for( int i=0; itop; i   )
        {        
                for( int j=i 1; j<=s->top; j   )
                {
                        if (s->item[i] > s->item[j])
                        {
                                int temp = s->item[j];
                                s->item[j] = s->item[i];
                                s->item[i] = temp;
                        }
                }
        }
}    int main(void)
{
   STACK S;
   int input=0, LoopFlag=1;
   char Sort;       S.top = -1;       cout << "  請輸入大於零的整數, 或是以 <0> 結束輸入 " << endl;
   while( LoopFlag )
   {        
        cin >> input;
        if (input == 0) 
                LoopFlag=0;
        else
        {
                if( PUSH(&S, input) == 0 )
                        cout << "堆疊已滿,PUSH失敗" << endl;
        }                
   }       cout << " 原始堆疊由上到下為:  ";
   PrintStack(&S);       cout << " 排序堆疊?  : ";
   cin >> Sort;       if ( Sort=='Y' || Sort=='y' )
   {
           BubbleSort(&S);
           cout << " 排序後的堆疊由上到下為:  ";
           PrintStack(&S);
   }      
   system("pause");
   return 0;
}
系統時間:2024-05-06 19:58:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!