双向链表

List item

#include<stdio.h>
#include<malloc.h>#define ElemType inttypedef struct Dulink{ ElemType data; struct Dulink *prior; struct Dulink *next;}Dulink,*DNode;typedef struct List{ int size; struct Dulink *first; struct Dulink *last;}List;void Init(List *list){ Dulink *s=(Dulink *)malloc(sizeof(Dulink)); list->first=list->last=s; if(s) printf(“初始化成功!\n”); s->next=s->prior=NULL; list->size=0;}void Creat(List *list,ElemType x){ Dulink *s=(Dulink *)malloc(sizeof(Dulink)); if(!s) printf(“结点分配失败!\n”); s->data=x; s->next=NULL; s->prior=list->last; list->last->next=s; list->last=s; list->size++;}void show(List *list){ Dulink *p=list->first->next; printf(“目前双向链表中的元素是:\n”); while(p!=NULL) { printf("%d>>",p->data); p=p->next; } printf(“NUL已经输出完毕\n”);}void find(List *list,ElemType x){ Dulink *p=list->first->next; while(p->data!=x) { p=p->next; } printf(“你要查找的实际元素是:%d\n”,p->prior->data);}void Insert(List *list,ElemType key,int x){ Dulink *s=(Dulink *)malloc(sizeof(Dulink)); if(s==NULL) printf(“节点申请失败!\n”); s->data=key; s->next=s->prior=NULL; Dulink *p=list->first->next; int i=1; while(i<x) { i++; p=p->next; } p->prior->next=s; s->prior=p->prior; s->next=p; p->prior=s; list->size++;}int length(List *list){ return list->size;}void main(){ List mylist; Init(&mylist); ElemType Item; int pos; printf(“请输入双链表的数据:\n”); while(scanf("%d",&Item),Item!=-1) { Creat(&mylist,Item); } show(&mylist); printf(“此时双链表的长度是:%d\n”,length(&mylist)); printf(“请输入你要查找的元素的后继元素:\n”); scanf("%d",&Item); find(&mylist,Item); printf(“请输入你要插入的元素\n”); scanf("%d",&Item); printf(“请输入你要插入的位置\n”); scanf("%d",&pos); Insert(&mylist,Item,pos); show(&mylist); printf(“此时双链表的长度是:%d\n”,length(&mylist));}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值