C++语言程序设计

程序举例
书中的实例程序定义了一个多边形结点类型，并实现了多边形链表的创建和删除，下面给出了该程序的详细的注释。

| 例8-18

#include "iostream.h"
struct polygon//定义结构polygon，作为链表结点类型
{
int n; //多边形顶点数
int *x; //多边形各顶点的横坐标数组
int *y; //多边形各顶点的纵坐标数组
polygon *next; //指向结构polygon的指针
};
polygon *create() //创建链表
{
struct polygon *p1,*p2,*head;
int i,n;
head=NULL;
scanf("%d",&n);
if(n==0) return head;
while(n!=0) //如果输入的n不为0，创建各多边形结点，组成链表
{
p1=new polygon;//创建一个结点的空间
p1->next=NULL;
p1->x=new int[n];
//开n个int型的内存空间，存放各定点横坐标
p1->y=new int[n];
//开n个int型的内存空间，存放各定点纵坐标
p1->n=n;
for(i=0;i<=n-1;i++)
scanf("%d%d", &(p1->x[i]),(&p1->y[i]));//输入各点坐标
if(head==NULL) head=p2=p1;
else{ //将链表尾和新结点链接起来
p2->next=p1;
p2=p1;
}
scanf("%d",&n);//输入n值
}//Match while statement
return head;//返回链表头指针
}
void del(head)//将整个链表删除
struct polygon *head;
{
struct polygon *p;
while(head!=NULL)
{
p=head;
head=head->next;//链表头指针指向下一个结点
free(p->x);free(p->y);//先释放各点坐标所占空间
free(p);//再释放整个结点所占空间
}//Match while statement
}
void main()
{
struct polygon *head;//声明一个指向结构polygon的指针变量head
head=create();//创建多边形链表，返回链表头指针head
del(head);//删除该多边形链表
}