zoukankan      html  css  js  c++  java
  • vc6和c#性能比较

    编了几年vc.又编了几年c#一直很好奇.这两个性能如何.

    还是写个程序进行测试一下

    vc6结构体

    struct DataNode1{
    int number; //学号
    char name[10]; //姓名
    char sex [4]; //性别
    double maths; //高数
    double Clan; //C语言
    double english; //英语

    };

    如果给结构体数组赋值 .添加1000000个 显示到列表之中 。经过测试 。vc6显示用时 [329]秒如果采用结构体链表用时[333]秒

    同样的结构体 c# 添加 添加1000000个 。 显示到列表之中 。经过测试 。 366.4559601秒

    显然 vc6比较快 

    这是测试的c语言 的头文件 


    #define LEN sizeof(struct student_stu)

    struct DataNode{
    int number; //学号
    char name[10]; //姓名
    char sex [4]; //性别
    double maths; //高数
    double Clan; //C语言
    double english; //英语
    DataNode *Next;
    };
    struct DataNode1{
    int number; //学号
    char name[10]; //姓名
    char sex [4]; //性别
    double maths; //高数
    double Clan; //C语言
    double english; //英语

    };

    class CStudent{
    public:
    CStudent();
    virtual ~CStudent();
    void Add( DataNode & mNode); //添加
    void Insert(const int index, DataNode& mNode);
    void Clear();
    void del(int number );
    int Del_Node(DataNode* pHead,int back);
    void showLinkToList(CListBox &mlist); //删除
    void save(); //保存
    void showLinkToList(CListCtrl &mlist);
    void AddToTail ( DataNode * mNode) ;
    int Length();
    void visit_list();
    void readFileToLink(char *strFileFullName);
    //排序

    void InsertSort();//插入排序
    void BubbleSort();//冒泡排序
    void sort(); //默认排序

    //private:
    DataNode* First;
    DataNode* Last;
    int Count;
    };

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // Student.cpp: implementation of the CStudent class.
    //
    //////////////////////////////////////////////////////////////////////

    #include "stdafx.h"
    #include "data.h"
    #include "Student.h"

    #ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif

    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////


    CStudent::CStudent()
    {
    First = Last = NULL;
    Count = 0;
    }

    CStudent::~CStudent()
    {
    Clear();
    Count = 0;
    }


    void CStudent::Add( DataNode & mNode)
    {
    //申请新节点
    /* DataNode * newNode=new DataNode();
    newNode->data=str;
    newNode->Next=NULL;


    if(First == NULL)
    {
    First = newNode;
    Last = First;
    Count =1;
    return;
    }else
    {



    //找最后一个节点
    DataNode * q = Last;
    //插入到链表最后
    q->Next=newNode;
    Count ++;
    }*/
    if(Count == 0)
    {
    First = new DataNode;//新建立结点&mNode;
    //开始赋值
    First-> number =mNode.number; //学号
    strcpy( First-> name,mNode.name); //姓名
    strcpy(First-> sex,mNode.sex); //性别
    First-> maths=mNode.maths; //高数
    First-> Clan=mNode.Clan; //C语言
    First-> english=mNode.english; //英语

    First->Next = NULL;
    Last = First;
    }
    else
    {
    if(Last != NULL)
    {
    while(Last->Next!=NULL)
    {
    Last =Last->Next;
    }
    }
    Last->Next = NULL;
    Last->Next =new DataNode;// &mNode;
    Last = Last->Next;
    Last-> number =mNode.number; //学号
    strcpy( Last -> name,mNode.name); //姓名
    strcpy( Last -> sex,mNode.sex); //性别
    Last-> maths=mNode.maths; //高数
    Last-> Clan=mNode.Clan; //C语言
    Last-> english=mNode.english; //英语


    Last->Next = NULL;


    }
    ++Count;
    }
    void CStudent::AddToTail ( DataNode * mNode)
    {
    DataNode * p = mNode;
    int itemno =0;

    while(p!=NULL)
    {
    Add( mNode[itemno]);
    p=p-> Next;
    itemno++;
    }


    //没有判断当链表为空的时候!!
    }
    int CStudent::Length()
    {
    return Count;
    }
    //保存。你自己完成
    void CStudent::save()
    {

    }
    //清空
    void CStudent::Clear()
    {
    DataNode* p = NULL;

    while(First!=NULL)
    {
    p = First;
    First=First->Next;
    p->Next=NULL;
    delete(p);
    p = NULL;
    }
    Last = NULL;
    First= NULL;
    Count = 0;
    }

    //插入
    void CStudent::Insert(const int index, DataNode& mNode)
    {
    if(index<Count-1)
    {
    DataNode* node = First;
    for(int i=0;i<index;i++)
    {
    node = node->Next;
    }
    DataNode* tmp = new DataNode;
    tmp->Next = node->Next;
    node->Next = tmp;


    tmp-> number =mNode.number; //学号
    strcpy( tmp-> name,mNode.name); //姓名
    strcpy(tmp-> sex,mNode.sex); //性别
    tmp-> maths=mNode.maths; //高数
    tmp-> Clan=mNode.Clan; //C语言
    tmp-> english=mNode.english; //英语
    }
    else if(index == Count-1)
    {
    this->Add(mNode);
    }
    ++Count;
    }

    void CStudent::del( int number)
    {
    if (First==NULL)return;//如果链表没有结点,就直接输出提示


    DataNode *p=First; //初始化pGuard指针
    DataNode *pGuard=First;
    if (First->number==number)//如果头结点数据符合关键字
    {
    p=First;//头结点是待删除结点
    First=First->Next;//先连
    delete p;//后断
    Last = NULL;
    Count=0;
    return;//结束函数运行
    }
    else//否则
    {

    while(p){
    if(p->number == number){
    pGuard->Next = p->Next;
    free(p);
    return ;
    }else{
    pGuard = p;
    }

    p = p->Next;
    }
    }
    //若head单链表中有数据为t的结点,删除之

    /* if(First== NULL)return;
    DataNode *p =First ;

    bool bFound =false;

    DataNode *node1=First;
    DataNode *node2=NULL;

    if (node1->number==number)
    {
    First=First->Next;
    delete node1 ;
    Count--;
    if(First== NULL)
    {
    // delete Last;
    Last = NULL;
    Count=0;
    }

    }
    else
    {
    node1=node1->Next;
    while (node1!=NULL)
    {
    node2=node1;
    node2=node2->Next;
    if (node2->number==number)
    {
    node1->Next=node2->Next;
    delete node2 ;
    Count--;
    break;
    }
    node1=node1->Next;
    }

    }

    //若head链表中没有数据域的值为number的结点,则输出删除失败的信息
    if(!bFound)
    {
    printf(" delete failure!");
    }*/


    }

    // 删除链表节点函数

    int CStudent::Del_Node(DataNode* pHead,int back)
    {
    int i = 0;
    int data;
    DataNode *_node = pHead;
    DataNode* pSwap;
    if ((back < 1) && (NULL == _node->Next))
    {
    printf("删除失败! ");
    return 0;
    }
    while(i < back-1)
    {
    _node = _node->Next;
    ++i;
    }
    pSwap = _node->Next;
    data = pSwap->number;
    _node->Next = _node-> Next->Next;
    free(pSwap);
    return data;
    }
    //显示学号到listbox
    void CStudent::showLinkToList(CListBox &mlist)
    {
    //输出head单链表
    mlist.ResetContent();
    CString str= "";

    DataNode*p=Last;
    while(p)
    {
    str = p->number ;
    mlist.AddString(str ); //输出结点的数据——字符串
    p=p->Next;
    }
    }

    void CStudent::showLinkToList(CListCtrl &mlist)
    {
    //输出head单链表
    mlist.DeleteAllItems();
    CString str= "";
    int item =0;
    DataNode*p=First;
    while(p)
    {
    str.Format("%d", p->number) ;
    mlist.InsertItem(item,str ); //输出结点的数据——字符串
    mlist.SetItemText(item,1,p->name );
    mlist.SetItemText(item,2,p->sex );

    str.Format ("%.1f",p->maths );//输出节点数据高数
    mlist.SetItemText (item,3,str );

    str.Format ("%.1f",p->Clan );//输出节点数据C语言
    mlist.SetItemText (item,4,str);

    str.Format ("%.1f",p->english );//输出节点数据英语
    mlist.SetItemText (item,5,str );



    item++;

    p=p->Next;

    }
    }

    /************************************************************************/
    /* 遍历链表 */
    /************************************************************************/
    void CStudent::visit_list()
    {
    DataNode* p = First ;
    while(p)
    {
    printf("current_addr=[%p] son_addr=[%p] son_son_addr=[%p] ",p,p->Next,p->Next);
    p=p->Next;
    }
    }
    //把文件的内容读入到链表里面
    void CStudent::readFileToLink(char *strFileFullName)
    {
    Clear();//清空
    if(!FileExist(strFileFullName))
    {
    return ;
    }
    char strbuf[1024];
    FILE *fp;
    if((fp=fopen(strFileFullName,"r"))==NULL)
    {
    printf("File Name Error. ");
    return ;
    }
    int i=0;

    while(!feof(fp))
    {
    if(fgets(strbuf,1024,fp))
    {
    i++;
    //写个函数。把字符串转换成一个数据节点;然后把数据节点add
    //Add(strbuf);

    }else
    {
    break;
    }
    }
    fclose(fp);
    return ;
    }


    /*
    ==========================
    功能:直接插入排序(由小到大)
    返回:指向链表表头的指针
    ==========================
    */


    void CStudent::InsertSort()
    {
    struct DataNode *first; /*为原链表剩下用于直接插入排序的节点头指针*/
    struct DataNode *t; /*临时指针变量:插入节点*/
    struct DataNode *p; /*临时指针变量*/
    struct DataNode *q; /*临时指针变量*/

    first = First->Next; /*原链表剩下用于直接插入排序的节点链表:可根据图12来理解。*/
    First->Next = NULL; /*只含有一个节点的链表的有序链表:可根据图11来理解。*/

    while (first != NULL) /*遍历剩下无序的链表*/
    {
    /*注意:这里for语句就是体现直接插入排序思想的地方*/
    for (t=first, q=First; ((q!=NULL) && (q->number < t->number)); p=q, q=q->Next); /*无序节点在有序链表中找插入的位置*/

    /*退出for循环,就是找到了插入的位置*/
    /*注意:按道理来说,这句话可以放到下面注释了的那个位置也应该对的,但是就是不能。原因:你若理解了上面的第3条,就知道了。*/
    first = first->Next; /*无序链表中的节点离开,以便它插入到有序链表中。*/

    if (q == First) /*插在第一个节点之前*/
    {
    First = t;
    }
    else /*p是q的前驱*/
    {
    p->Next = t;
    }
    t->Next = q; /*完成插入动作*/
    /*first = first->Next;*/
    }
    return;
    }

    void CStudent::BubbleSort()
    {
    AfxMessageBox("不会写");
    }
    //默认的排序
    void CStudent:: sort()
    {
    DataNode*p3=First;

    DataNode*p2,*p1,*p4,*p5;
    while(p3->Next->Next!=NULL)//注意链表向前推进的方式
    {
    p2=p3->Next;
    p5=p2;

    p1=p2;

    bool flag=false;

    while(p1->Next!=NULL)//内存循环终止的条件
    {
    if(p5->number >p1->Next->number)//找出原链表中剩余节点中值最小的那个节点
    {
    p5=p1->Next;
    p4=p1;
    flag=true;
    }

    p1=p1->Next;
    }

    if(flag)//交换两个节点的顺序,值小的节点往前调
    {

    if(p2==p4)//此种情况为要交换顺序的两个节点相邻
    {
    p2->Next=p5->Next;
    p5->Next=p2;
    p3->Next=p5;
    }
    else//这种情况为要交换的两个节点不相邻
    {
    DataNode*temp=p5->Next;
    p5->Next=p2->Next;
    p3->Next=p5;
    p4->Next=p2;
    p2->Next=temp;
    }

    }

    p3=p3->Next;
    }
    }

  • 相关阅读:
    【转】浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)
    【转】1.2 CDN的基本工作过程
    【转】 最新版chrome谷歌浏览器Ajax跨域调试问题
    【转】网段,子网掩码,网络标识,IP划分
    【转】默认网关有什么用?我应当怎么填写默认网关和DNS呢
    【转】DHCP工作过程详解
    【转】WINS服务器与DNS服务器有什么区别?
    46. Permutations 排列数
    30. Substring with Concatenation of All Words
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/zhoujgssp/p/7487906.html
Copyright © 2011-2022 走看看