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