资源描述
《C++面向对象程序设计》实验报告
实验8 综合实验
[实验目的]
1、全面了解面向对象思想;
2、掌握面向对象程序设计的方法;
3、学会简单的Windows程序设计。
[实验要求]
给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。
[实验学时]
2学时。
[实验内容]
1、用面向对象思想,设计实现一个链表LinkList类。链表中的结点如下面Node结构所定义,成员函数可以包括构造空链表、插入结点、删除结点、计算链表长度、打印每个结点、生成链表等。测试程序为:将整数2-10中的偶数结点按顺序用链表存储,计算结点的个数并输出每个结点。已知链表的结点类型定义如下:
typedef struct Node
{
int data;
struct Node *next;
}Node,*PNode;
[源程序]
#include<iostream>
#include<stdlib.h>
using namespace std;
#define N 24
typedef struct Node
{
int data;
struct Node *next;
}Node,*PNode;
class Linklist
{
public:
void strNode();//构造空链表
void prodlinklist(Node a[]);//生成链表
int lenlist();//计算节点长度
void printlist();//打印节点
void inserlist(Node &r);//插入节点
void concellist(Node r);//删除结点
protected:
Node *p;
};
void Linklist::strNode()//构造空链表函数
{
p=new Node;
p->next=NULL;
}
void Linklist::prodlinklist(Node a[])//生成链表
{
int i;
Node *q;
q=new Node;
q=p;
for(i=0;i<N;i++)
{
if(a[i].data==-1)break;
q->next=&a[i];
q=q->next;
}
q->next=NULL;
}
int Linklist::lenlist()//计算节点长度
{
int i,j=0;
Node *q;
q=new Node;
q=p;
for(i=0;i<N;i++)
{
if(q->next!=NULL)
{
q=q->next;
j++;
}
else break;
}
return(j);
}
void Linklist::printlist()//打印节点
{
int i;
Node *q;
q=new Node;
q=p;
if(q->next==NULL)
{
cout<<"没有节点"<<endl;return;
}
for(i=0;i<N;i++)
{
if(q->next!=NULL)
{
q=q->next;
cout<<q->data<<' ';
}
else {cout<<endl;break;}
}
}
void Linklist::inserlist(Node &r)//插入节点
{
Node *q;
q=new Node;
q=p;
while(q->next!=NULL)
{
q=q->next;
}
q->next=&r;
q=q->next;
q->next=NULL;
}
void Linklist::concellist(Node r)//删除结点
{
int i,j=0;
Node *q,*s;
q=new Node;
s=new Node;
q=p;
for(i=0;q->next!=NULL;i++)
{
q=q->next;
if(q->data==r.data)
{
s=q->next;
q->next=s->next;
j=1;
}
}
if(j==0)cout<<"没有找到要删除结点"<<endl;
}
void inputdata(Node a[])//输入每个节点数据
{
cout<<"输入数据,当输入为-1时停止"<<endl;
int i=0;
for(i=0;i<N;i++)
{
cin>>a[i].data;
if(a[i].data==-1)break;
}
}
void main()
{
Linklist p;
Node a[N];
int i=2,j;
inputdata(a);//输入每个节点数据
p.strNode();//构造空链表
for(;i<=10;i++)
{
if(a[i].data==-1)break;
if(i%2==0)
p.inserlist(a[i]);//插入链表
}
j=p.lenlist();//输出节点个数
cout<<"结点个数:"<<j<<endl<<"结点:";
p.printlist();//打印链表
}
[测试数据]
第 5 页 共 5 页
展开阅读全文