双向循环链表的建立,插入,删除(带头节点)
2018-01-03 00:28
731 查看
#include<iostream> #include<cstdio> #include<malloc.h> #define OVERFLOW -2 #define ERROR -1 typedef struct DuLNode{ int data; struct DuLNode *prior,*next; }DuLNode,*DuLinkList; void CreateList_DuL(DuLinkList &L,int n){//头插入法建立双向循环链表 int data; DuLNode *rear,*p; rear=L=(DuLinkList)malloc(sizeof(DuLNode)); L->next=NULL; for(int i=0;i<n;i++){ p=(DuLinkList)malloc(sizeof(DuLNode)); scanf("%d",&data); p->data=data; p->next=rear->next; rear->next=p; p->prior=rear; rear=p; } rear->prior=L; L->prior=rear; } void ListInsert_Dul(DuLinkList &L,int i,int e){ //在双向链表第i个位置插入元素e DuLNode *p,*q; p=L; int j=0,data; while(p&&j<i-1){ p=p->next;j++; } if(!p||j>i-1)return; q=(DuLinkList)malloc(sizeof(DuLNode)); q->data=e; q->next=p->next; p->next->prior=q; p->next=q; q->prior=p; } void ListDelete_Dul(DuLinkList &L,int i){ DuLNode *q,*p; p=L; int j=0; while(p&&j<i){ p=p->next;j++; } if(!p||j>i)return; p->prior->next=p->next; p->next->prior=p->prior; free(p); } int main(){ DuLinkList T; int n; printf("输入个数:\n"); scanf("%d",&n); printf("输入个元素:\n"); CreateList_DuL(T,n); printf("插入位置与值\n"); int pos,val; scanf("%d%d",&pos,&val); ListInsert_Dul(T,pos,val);//随便想第三个位置插入4 printf("打印:\n"); DuLNode *p; p=T->next; while(p){ printf("%d ",p->data); p=p->next; } printf("\n删除位置\n"); scanf("%d",&pos); ListDelete_Dul(T,pos); printf("打印:\n"); p=T->next; while(p){ printf("%d ",p->data); p=p->next; } }
相关文章推荐
- 双向循环链表的建立,插入,删除(不带头结点)
- 双向链表的初始化,建立,添加节点和删除节点(注意插入和删除要分三种情况)
- 编写算法实现建立一个带头结点的含n个元素的双向循环链表H,并在链表H中的第i个位置插入一个元素e
- java建立双向链表,插入结点,删除节点
- 双向非循环递增链表——插入,删除,清空
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- 数据结构--双向循环链表--插入和删除
- 双向非循环递增链表——插入,删除,清空
- 数据结构——10 双向链表插入和删除节点
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- 数据结构---单链表(建立,节点删除,节点插入)
- c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
- 带头节点的双向循环链表的增删查改
- 单链表的建立、测长、打印、删除节点、插入节点、排序、逆转
- 【C语言】 链表 单链的建立,节点增加 删除 顺序插入
- 双向循环链表的插入删除
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- 2016年12月23日学习总结----双向循环链表操作程序(头插、尾插、中间插入、删除)
- C语言——链表部分(包括节点的建立、总长度、显示链表、插入节点以及删除节点)