学了一下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 编辑 ]










