| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1025 人关注过本帖
标题:学了一下C++,尝试用类与C一块做了一个链表。
取消只看楼主 加入收藏
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
学了一下C++,尝试用类与C一块做了一个链表。
程序代码:
//==========[头文件]==========
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
# include <iostream>
//==========[链表类-结构]==========
class List
{
public:
    void init_list();                   //成员涵数-初始化
    void show_list();                   //成员涵数-遍历
    void show_length();                 //成员涵数-长度计算
    void insert_list(int post,int val); //成员涵数-长度元素,post是插入的位置,val是插入的值
    void remove_list(int post);         //成员涵数-删除元素,post是删除的位置
    void sort_list();                   //成员涵数-排序
private:
    class List *pHead;
    class List *Next;
    int list_len;//记录当前链表长度
    int data;
};
//==========[程序入口]==========
int main()
{
    List A_list;//建立链表对象A_list
    A_list.init_list();
    A_list.insert_list(2,3);
    A_list.sort_list();
    A_list.show_list();


    return 0;
}
//==========[链表类-初始化]==========
void List::init_list()
{
    int i;//循环标识
    ///////////////////////////
    class List *phead = (class List *)malloc(sizeof(class List));
    if(NULL == phead)
    {
        std::cout<<"分配内存失败!退出程序"<<std::endl;
        exit(-1);
    }
    class List *pTail =phead;
    pHead =phead;
    //////////////////////////
    std::cout<<"请输入链表的长度: ";
    std::cin>>list_len;
    for(i=0;i<list_len;++i)
    {
        class List *pNew = (class List *)malloc(sizeof(class List));
        if(NULL == pNew)
        {
            std::cout<<"分配内存失败!退出程序"<<std::endl;
            exit(-1);
        }
        std::cout<<"请输入结点的值: ";
        std::cin>>pNew->data;
        pTail->Next =pNew;
        pNew->Next =NULL;
        pTail =pNew;
    }
    return;
}
//==========[链表类-遍历]==========
void List::show_list()
{
    class List *p =pHead->Next;
    std::cout<<"----------------"<<std::endl<<"当前链表的值为: ";
    while(NULL != p)
    {
        std::cout<<p->data<<" ";
        p =p->Next;
    }
    std::cout<<std::endl;
    return;
}
//==========[链表类-插入元素]==========
void List::insert_list(int post,int val)
{
    if(list_len +1 <post || post <1)
    {
        std::cout<<"当前插入点有误,请重新选择插入的点!"<<std::endl;
    }
    else
    {
        class List *p =pHead;//定义一个位置标识p,定位post用
        for(int i=0;i<post-1;++i)//定位插入位的前一个结点
        {
            p=p->Next;
        }
        class List *pInsert =(class List *)malloc(sizeof(class List));//定义一个用于插入的结点
        class List *pRear =p->Next;//保存插入位的后一个结点地址
        p->Next =pInsert;
        pInsert->Next =pRear;
        pInsert->data =val;
        list_len =list_len+1;//插入一个,长度增加"1"
    }
    return;
}
//==========[链表类-删除元素]==========
void List::remove_list(int post)
{
    if(list_len<post || post<1)
    {
        std::cout<<"当前删除位置有误,请重新选择正确的位置!"<<std::endl;
    }
    else
    {
        class List *p =pHead;//用于定位post的前一个位置的指针
        for(int i=0;i< post-1;++i)//指向要删除的前一个结点
        {
            p=p->Next;
        }
        class List *pRem=p->Next;//保存要删的地址
        class List *Q =p->Next->Next;//在free(prem)前,把他的后继结点地址保存在Q里面
        free(pRem);
        pRem =NULL;
        p->Next =Q;   
        list_len =list_len-1;//删除一个,长度减"1"
    }
    return;
}

//==========[链表类-长度计算]==========
void List::show_length()
{
    int count =0;
    class List *p =pHead->Next;
    while(NULL != p)
    {
        count =count +1;
        p=p->Next;
    }
    list_len =count;
    std::cout<<"当前链表的长度为: "<<list_len<<std::endl;
   
}
//==========[链表类-排序]==========
void List::sort_list()
{
    int stroe;//传递
    class List *p =pHead->Next;
    class List *q ;
    for(p;p !=NULL;p=p->Next)
    {
        for(q=p->Next;q !=NULL;q=q->Next)
        {
            if(p->data >q->data)
            {
                stroe =p->data;
                p->data = q->data;
                q->data = stroe;
            }
        }
    }   
    return;
}


[ 本帖最后由 cosam 于 2011-10-25 14:40 编辑 ]
搜索更多相关主题的帖子: include public 
2011-10-25 14:38
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:0 
这是4个字,没学过C的人可能会看不懂,因为我提出过一个问题,问一个人,用C和类一块写程序行不行,他说,C和c++不能一块用。
这就是我以前所说的,最早期的版本的c++相当于C与类。
2011-10-25 14:52
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:0 
啊,如果我定义一个类库,这个类库就是class List{}
所以他就提供了这样的接口:
    void init_list();                   //成员涵数-初始化
    void show_list();                   //成员涵数-遍历
    void show_length();                 //成员涵数-长度计算
    void insert_list(int post,int val); //成员涵数-长度元素,post是插入的位置,val是插入的值
    void remove_list(int post);         //成员涵数-删除元素,post是删除的位置
    void sort_list();
//--------------------------
额,当然这是做出来玩玩,以后还是只有一种语言方式来写的。
2011-10-25 14:55
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:0 
想要保护链表里的数据,又烦写多重的接口,所以想了想这样好相也ok。
2011-10-25 14:59
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:0 
回复 3楼 nomify

````
2011-10-25 15:00
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:0 
1.类函数命名规范;
2.少混用c/c++;
记下,还有什么的,请指教啊。
2011-10-25 15:07
快速回复:学了一下C++,尝试用类与C一块做了一个链表。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042023 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved