严蔚敏数据结构 P36页——双向链表的插入
/*
严蔚敏数据结构 P36页——双向链表的插入
*/
//头文件
#include<stdio.h>
#include<stdlib.h>
//结构
typedef struct st
{
int data; //数据域
struct st *TOP; //前置指针
struct st *NEXT; //后置指针
}list, *sqlist;
//函数区
void set_list(sqlist LIST) //建立双向链表
{
int date, len, i;
sqlist NEW = NULL, TEMP = NULL; //NEW用于指向新开辟的结点,TEMP用于指向新结点的前一个结点
printf("请输入需要开辟的结点个数:"); //显示提醒用户相对应的操作
scanf_s("%d", &len); //利用date记录长度数据
TEMP = LIST; //将TEMP指向头结点的下一个结点
for (i = 1;i <= len;i++) //开辟各个结点
{
printf("请输入第%d个结点的数据:", i); //显示提醒用户输入相对应的操作
scanf_s("%d", &date); //记录输入
NEW = (sqlist)malloc(sizeof(list)); //建立新结点
if (!NEW) //判断是否开辟成功
{
printf("程序建立开辟结点有误,检查程序!\n"); //显示错误信息
exit(1); //退出程序
}
NEW->data = date; //将用户输入的数据写进新结点的数据域里面
NEW->NEXT = NULL; //将新开辟结点的后置指针挂起
TEMP->NEXT = NEW; //将新结点的前一个结点指向新结点
NEW->TOP = TEMP; //将NEW的前置结点指向上一个结点,构成双向链表
TEMP = TEMP->NEXT; //将移动指针向下一个结点移动
}
NEW->NEXT = LIST; //将尾结点的后置指针指向头结点
LIST->TOP = NEW; //将头结点的前置指针指向尾结点
}
void prin(sqlist List) //遍历双向链表
{
sqlist p = NULL; //定义操作指针
p = List->NEXT; //将p指向第一个元素
printf("双向链表的值为:"); //显示信息
do
{
printf("%d ", p->data); //输出元素
p = p->NEXT; //p指向下一个元素
} while (p