严蔚敏数据结构 P36——算法2.18(前置程序)
双向循环链表的建立
利用前置指针和后置指针进行正序和逆序输出
/*
严蔚敏数据结构 P36——算法2.18(前置程序)
双向循环链表的建立
*/
//头文件
#include<stdio.h>
#include<stdlib.h>
//结构
typedef struct st //双向链表st的结构
{
int date; //数据域
struct st *TOP; //前置指针域
struct st *NEXT; //后置指针域
}list, *sqlist;
//函数区
void build_list(sqlist List) //建立双向链表
{
int len, i, date;
sqlist NEW = NULL, temp = NULL; //NEW用于指向新开辟的结点,temp用于指向新开辟结点的前一个结点
printf("输入需要开辟的元素个数:"); //提醒用户输入相对于的操作
scanf_s("%d", &len); //记录用户需要开辟的元素个数
temp = List; //将头指针的权限赋给temp
for (i = 1;i <= len;i++)
{
printf("请输入第%d个结点的元素:", i); //提醒用户输入相对于的操作
scanf_s("%d", &date); //记录用户每次结点开辟的个数
NEW = (sqlist)malloc(sizeof(list)); //开辟新的结点并用NEW指向
if (!NEW)
{
printf("程序建立开辟结点有误,检查程序!\n"); //显示错误信息
exit(1); //退出程序
}
NEW->date = date;