数据结构之双线链表

来源:互联网 发布:mac播放器哪个好 编辑:程序博客网 时间:2024/06/05 19:14

双向链表的相关操作


// ConsoleApplication2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <cstdlib>#include <cstring>using namespace std;typedef struct Node{int x;Node *next;Node *pre;}Node,*Lnode;void creat(Node& node,int n,int *a){Lnode p=&node,q;for(int i=n-1;i>=0;i--){q= new Node;q->next=NULL;q->pre=NULL;q->x=a[i];p->next->pre=q;q->next=p->next;q->pre=p;p->next=q;}}bool Del(Node& node,int num){Lnode p=node.next,q=&node;for(p;p!=q;p=p->next){if(p->x==num)   //  找到这个元素num了{q=p;p->pre->next=p->next;p->next->pre=p->pre;free(q);return true;}}return false;}void Prin(Node& node){Lnode p=node.next,q=&node;for(p;p!=q;p=p->next)cout<<p->x<<endl;cout<<"end"<<endl;}bool Add(Node& node,int i,int num){   //  在第i个位置插入元素num(默认从head开始)Lnode p=node.next,q=&node;int k=1;for(;k<i;p=p->next,k++)  ;//   现在就相当于在q和p中插入一个元素Lnode r=new Node;r->x=num;r->next=r->pre=NULL;p->pre->next=r;r->pre=p->pre;r->next=p;p->pre=r;return true;}void SupPrin(Node& node ,int i)   //  为了验证循环列表的正确性,从第i个节点开始输出{Lnode p=node.next,q;int k=1;for(;k<i;) {p=p->next;k++;}//  现在是从p开始打印了//  需要注意到一点是,我这个node类型,head是空的,在输出结果的时候需要跳过head.xq=p;for(p;p!=&node;p=p->next)cout<<p->x<<endl;p=node.next;for(;p!=q;p=p->next)cout<<p->x<<endl;cout<<endl;}int main(){Node head;head.next=&head;head.pre=&head;int a[5]={2,3,5,1,78};creat(head,5,a);Prin(head);bool t1=Del(head,5);cout<<t1<<endl;Prin(head);cout<<endl<<endl;SupPrin(head,2);cout<<endl<<endl;Add(head,2,45);Add(head,2,35);Add(head,2,15);Add(head,2,65);Prin(head);return 0;}


0 0