赞
踩
根据结点插入位置的不同,链表的创建方法可分为前插法和后插法
前插法是通过将新节点逐个插入链表的头部(头节点之后)来创建链表,每次申请一个新节点,读入相应的数据元素值,然后将新节点插入到头节点之后。
后插法是通过将新节点逐个插入到链表的尾部来创建链表。同前插法一样,每次申请一个新节点,读入相应的数据元素值。不同的是,为了使新节点能够插入到表尾,需要增加一个尾指针 r 指向链表的尾结点。
#include<iostream> using namespace std; typedef struct DULNode//双向链表 { int data; struct DULNode *prior; struct DULNode *next; }DULNode,*DULinkList; void create_Head(DULinkList &L,DULinkList &p,int n)//前插法 { L = new DULNode; L->next = NULL; L->prior = NULL; for( int i=0; i<n; i++ ) { p = new DULNode; cin>>p->data; if(i==0)//当L只有头节点时要单独按出来连接节点p { p->next = NULL; p->prior = L; L->next = p; } else { p->next = L->next; L->next->prior =p; p->prior = L; L->next = p; } } } void create_Tail(DULinkList &L,DULinkList &p,int n)//尾插法 { DULinkList r; L = new DULNode; L->next = NULL; L->prior = NULL; r = L; for( int i=0; i<n; i++ ) { p = new DULNode; cin>>p->data; p->next = NULL; r->next = p; p->prior = r; r= p; } } void result_next(DULinkList L,int n) { DULinkList p; p = L->next; for( int i=0; i<n; i++ ) { cout<<p->data; p = p->next; } cout<<"\n"; } void result_prior(DULinkList L,int n) { DULinkList p; p = L->next; for( int i=0; i<n-1; i++ ) p = p->next; for( int i=0; i<n; i++ ) { cout<<p->data; p = p->prior; } cout<<"\n"; } int main() { int n; DULinkList L,p; cout<<"数据结构---双向链表\n"; cout<<"请输入元素个数:"; cin>>n; //尾插法 create_Tail(L,p,n); cout<<"尾插法结果(next):"; result_next(L,n); cout<<"尾插法结果(prior):"; result_prior(L,n); //前插法 create_Head(L,p,n); cout<<"前插法结果(next):"; result_next(L,n); cout<<"前插法结果(prior):"; result_prior(L,n); }
数据结构---双向链表 请输入元素个数:3 4 5 6 尾插法结果(next):456 尾插法结果(prior):654 4 5 6 前插法结果(next):654 前插法结果(prior):456 -------------------------------- Process exited after 6.439 seconds with return value 0 请按任意键继续. . .
有问题可以评论留言,欢迎各位大佬的批评指正,十分感谢!
转载需说明
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。