双向循环链表的练习

//(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);
}*/

 

转载于:https://www.cnblogs.com/yanyanwen/archive/2013/04/23/3038992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值