QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: atfa

编程版面的大牛小牛,发贴前看过来!

[复制链接]
发表于 2003-7-21 01:45:26 | 显示全部楼层
[code:1]
            shi yi shi……
    [/code:1]
回复

使用道具 举报

发表于 2003-7-29 22:41:37 | 显示全部楼层

这种灌法
回复

使用道具 举报

发表于 2003-7-30 10:09:20 | 显示全部楼层
代码:
[code:1]
void main()
{
}
[/code:1]
cool!
回复

使用道具 举报

发表于 2003-8-13 20:06:34 | 显示全部楼层
哈哈

   [code:1]
          #include
          #include
          #include
   [/code:1]
回复

使用道具 举报

发表于 2003-8-20 16:06:11 | 显示全部楼层
[code:1]
      hello,china!
[/code:1]
回复

使用道具 举报

发表于 2003-8-22 21:41:44 | 显示全部楼层
[code:1]
have a test
[/code:1]
回复

使用道具 举报

发表于 2003-8-24 13:02:13 | 显示全部楼层
[code:1]
  试成功了吗?
[/code:1]
回复

使用道具 举报

发表于 2003-8-29 10:29:28 | 显示全部楼层
代码:
[code:1]
main()
{printf("welcome to linux world!\n");
}
[/code:1]  
回复

使用道具 举报

发表于 2003-8-29 13:42:10 | 显示全部楼层
试!
[code:1]
在这里我不说基本的剔归知识
假设二叉树的节点结构如下:
typedef struct node
{int data;
struct node *left;
struct node *right;
}btree;

   
     我在这里想说一下清华的数据结构C语言版的配套习题(书名<<数据结构(c语言版)习题与解析>> 李春葆 编著)里面的关于二叉树的几个剔归程序有错误。(我也是一个网友说这几个DD运行结果不对)


1:计算一棵二叉树中的具有双孩子节点(也就是说左右孩子节点都有)的节点总数.
  它的剔归模型如下:

f(b)=0  若B==NULL
f(b)=1  若b->left!=NULL 且 b->right!=NULL
f(b)=f(b->left)+f(b->right)  其他情况

它的函数剔归是
int twochild(btree *b)
{ int num1,num2;
if(b==NULL)
return 0;
else if(b->left!=NULL&&b->right!=NULL)
return 1;
else
{num1=twochild(b->left);
  num2=twochild(b->right);
  return num1+num2;
}

}

仔细分析这个剔归函数,它的错误地方是如果找到一个具有两个双孩子节点的节点那么它直接返回1 而不会再判断它的两个孩子节点,也就是说如果它的孩子节点是具有双孩子节点的节点的话,它根本不理睬!!!!

下面是我分析的模型
f(b)=0    若b==NULL
f(b)=0    若b->left==NULL and b->right==NULL
f(b)=f(b->left)+f(b->right) 若b->left==NULL or b->right==NULL
f(b)=f(b->left)+f(b->right)+1 若b->left!=NULL 且b->right!=NULL

我写的函数:
  int twochild(btree *b)
{ int num1=0, num2=0;
  if(b==NULL)
   return  0;
    else if(b->left==NULL&&b->right==NULL)
  return 0;
     else if((b->left==NULL&&b->right!=NULL)||(b->left!=NULL&&b->right==NULL))
     {num1=twochild(b->left);
      num2=twochild(b->right);
      return num1+num2;
     }
     else
      { num1=twochild(b->left);
       num2=twochild(b->right);
return num1+num2+1;
      }


2:计算一棵二叉树单孩子节点数

它的模型
f(b)=0  若b==MULL
f(b)=1  若b->left==NULL or b->right==NULL
f(b)=f(b->left)+f(b->right)  其他

它的剔归函数如下:
int onechild(btree *b)
{int num1,num2;
if(b==NULL) return 0;
else if(b->left==MULL&&b->right!=NULL)||(b->left!=NULL)&&b->right==NULL)
return 1;
else
{num1=onechild(b->left);
num2=onechild(b->right);
return num1+num2;
}
}

这个函数错误之处在于如果找到了一个只有一个孩子的节点,那么直接返回 1而不会检查是否他的那个孩子节点是否还有节点.

我分析的模型:
f(b)=0    若B==NULL
f(b)=0   若b->left==NULL and b->right==NULL
f(b)=f(b->left)+f(b->right)+1 若b->left==NULL or b->right==NULL
f(b)=f(b->left)+f(b->right)   若b->left==NULL and b->right==NULL

我写的函数:
int onechild(btree *b)
{   int num1=0,num2=0;
    if(b==NULL)
     return 0;
      else if(b->left==NULL&&b->right==NULL)
       return 0;
      else if((b->left==NULL&&b->right!=NULL)||(b->left!=NULL&&b->right==NULL))
      {num1=onechild(b->left);
       num2=onechild(b->right);
       return (num1+num2+1);

      }

      else
       { num1=onechild(b->left);
num2=onechild(b->right);
return (num1+num2);
       }

}

该书上还有一个二叉树的非剔归函数入下:

void postorder(btree *b)
{btree *stack[m0],*p;   
  int tag[m0],top=0;
p=b;
do
{while(p!=NULL)  /* 扫描左节点*/
  {top++;
   stack[top]=p;
    tag[top]=0;
   p=p->next;
   }
if(top>0)
{ p=stack[top]; /*p所指节点的左子树已遍历过*/
   if(tag[top]==1) /*p的左右子树都访问过*/
    {top--;
printf("%d",p->data);
   /*  我认为这里少了一句 p=stack[top];*/
     }
    if(top>0)
     {p=p->right; /*扫描右子树*/
      tag[top]=1; /*表明当前节点的右子树已访问过*/
      }
   }   
  }while(top!=0)
}


[/code:1]
回复

使用道具 举报

发表于 2003-8-30 10:08:35 | 显示全部楼层
我也来试试
[code:1]
#include <gtk/gtk.h>
void        on_button_clicked(GtkWidget* button, gpointer userdata)
{
        GtkWidget *dialog;
        dialog = gtk_message_dialog_new(NULL,
                        GTK_DIALOG_MODAL |GTK_DIALOG_DESTROY_WITH_PARENT,
                        GTK_MESSAGE_INFO,
                        GTK_BUTTONS_OK,
                        (gchar*)userdata);
        gtk_dialog_run(GTK_DIALOG(dialog));
        gtk_widget_destroy(dialog);
}

int        main(int argc, char* argv[])
{
        GtkWidget *window, *button;
        gtk_init(&argc, &argv);
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT(window),"delete_event",
                        G_CALLBACK(gtk_main_quit),NULL);
        gtk_window_set_title(GTK_WINDOW(window),"Hello World!");
        gtk_container_set_border_width(GTK_CONTAINER(window),10);
        button=gtk_button_new_with_label("Hello World!");
        g_signal_connect(G_OBJECT(button),"clicked",
                        G_CALLBACK(on_button_clicked),(gpointer)"你好!\n自由的世界。");
        gtk_container_add(GTK_CONTAINER(window),button);
        gtk_widget_show_all(window);
        gtk_main();
        return FALSE;
}

[/code:1]
回复

使用道具 举报

发表于 2003-9-2 17:20:41 | 显示全部楼层
[code:1]
//试试看
#include <iostream>
using namespace std;
void main(void)
{
      cout<<"试一下";
}
[/code:1]
回复

使用道具 举报

发表于 2003-9-3 11:10:58 | 显示全部楼层
代码:

      [code:1]
       我也试试哈   
    [/code:1]
回复

使用道具 举报

发表于 2003-9-5 20:16:17 | 显示全部楼层
[code:1]
#include <iostream.h>

double max(double x,double y);

void main()
{
  double a,b,c;
  cout<<"Please input two number:"<<endl;
  cin>>a>>b>>endl;

  c=max(a,b);
  
  cout<<"The max is:"<<c<<endl;
}

double max(double x,double y)
{
  return x>y?x:y;
}[/code:1]
回复

使用道具 举报

发表于 2003-9-11 20:20:16 | 显示全部楼层
[code:1]
class CTest
{
public:
    int m_nCount;

};
[/code:1]
回复

使用道具 举报

发表于 2003-9-23 21:59:50 | 显示全部楼层
[code:1]
#include <iostream>
int main()
{
    using namespace std;
    cout << "Hello" << endl;
   
    return 0;
}
[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 03:10 , Processed in 0.041051 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表