html网站开发图片素材/简述网站制作的步骤
根据结点插入位置的不同,链表的创建方法可分为前插法和后插法
前插法
前插法是通过将新节点逐个插入链表的头部(头节点之后)来创建链表,每次申请一个新节点,读入相应的数据元素值,然后将新节点插入到头节点之后。
后插法
后插法是通过将新节点逐个插入到链表的尾部来创建链表。同前插法一样,每次申请一个新节点,读入相应的数据元素值。不同的是,为了使新节点能够插入到表尾,需要增加一个尾指针 r 指向链表的尾结点。
前插法和后插法过程示意图与单链表的创建类似,只不过是多了个prior前驱指针
C++代码
#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
请按任意键继续. . .
有问题可以评论留言,欢迎各位大佬的批评指正,十分感谢!
转载需说明