C++语言程序设计

这样的结点组成的链表可以表示成下面的图形：

| 图8-7

链表创建函数creat首先需要用户输入一个多边形的顶点数n，只要n不为0，就创建一个n边形的结点。让用户输入各顶点坐标，并且把该结点链接到原链表的末尾。最后返回链表头指针head。
链表删除函数del则实现了从链表头开始，逐个删除链表的结点，从而将整个链表删除。判断删除结束的标识为链表头指针为空，因为每删除一个结点，就将该链表的头指针指向下一个结点，直到全部链表结点被删除。另外，每次删除一个链表结点的时候，要先释放该链表结点中多边形顶点坐标所占的内存空间，再释放整个链表结点所占的地址空间。
书中提供了两个create函数，另一个create函数的注释如下：

| 例8-19

void Push(polygon*& head, int n)
{
polygon* newNode = new polygon;
newNode = new polygon; //开一个新结点
newNode->next=NULL; //新结点指针域初始化为0
newNode->x = new int[n];//为新结点的数据分配内存
newNode->y = new int[n];
newNode->n=n;
for(int i=0;i<=n-1;i++){//输入个结点的坐标
cout<<"请输入多边形顶点x、y坐标，坐标值之间用空格分隔：";
cin>>newNode->x[i]>>newNode->y[i];
}
newNode->next = head; // 新结点插入链表头部
head = newNode; //修改头指针
}
polygon *create()
{
polygon* head = NULL;
polygon* tail;
int n;
cout<<"请输入多边形顶点的个数(顶点个数为0时结束)：";
cin>>n;
if(n==0) return head;
Push(head, n);//创建链表头结点
tail = head;//链表尾指针指向链表头
cout<<"请输入多边形顶点的个数(顶点个数为0时结束)：";
cin>>n;
while(n!=0)//创建新的链表结点，直至n为0为止
{
Push(tail->next, n); // 在tail->next增加结点
tail = tail->next; //尾结点后移
cout<<"请输入多边形顶点的个数(顶点个数为0时结束)：";
cin>>n;
}
return head;
}

结构是建立链表的基础，为了更好地掌握链表的用法，这里再举一个结构的例子。问题的描述是：
说明一个结构类型，包含用户的姓名（6个字符的字符串）和电话号码（8个字符的字符串）。该函数读入N位用户的数据存入结构数组中，并且实现了对数组数据按字典顺序排序和输出所有数据。