//(1)编写算法,创建一个带头结点的双向循环链表,其结点结构如下:
//(2)编写算法,删除链表上的最后一个结点。
//(3)编写算法,遍历链表,输出所有结点的信息。
/*#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct node
{
struct node *prior;
elemtype data;
struct node *next;
}NODE;
NODE *save() //创建头结点
{
NODE *newhead;
newhead=(NODE *)malloc(sizeof(NODE));
newhead->data=0;
newhead->prior=newhead->next=NULL;
return newhead;
}
void creat(NODE *head)
{
int n;
NODE *new_one;
printf("请创建链表:\n");
printf("请输入节点的个数:");
scanf("%d",&n);
fflush(stdin);
printf("请输入各个接点的值:");
for(int i=1;i<=n;i++) //把值传入链表中
{
if(i=1) //第一个结点的前驱后继都是头结点
{
new_one=(NODE *)malloc(sizeof(NODE));
scanf("%d",&new_one->data);
new_one->next=head;
head->next=new_one;
new_one->prior=head;
head->prior=new_one;
continue; //创建第一个后回去
}
new_one=(NODE *)malloc(sizeof(NODE)); //第二个及大于第二个的时候做下面的,连串起来
scanf("%d",&new_one->data);
head->next->prior=new_one;
new_one->next=head->next;
head->next=new_one;
new_one->prior=head;
}
}
void prn(NODE *head) //遍历链表
{
NODE *View;
printf("反序输出\n"); //使用了头插法所以反序输出
for(View=head->next;View!=head;View=View->next)
printf("%d\t",View->data);
}
void DEL_last(NODE *head) //删除最后一个结点
{
NODE *_Del;
_Del=head->prior;
head->prior=_Del->prior;
_Del->prior->next=head;
free(_Del);
printf("删除完毕!\n");
}
void main()
{
NODE *head;
head=save();
creat(head);
prn(head);
DEL_last(head);
printf("删除之后的链表为:\n");
prn(head);
}*/