当前位置:网站首页>双向链表—全部操作
双向链表—全部操作
2022-07-06 09:27:00 【帅帅气气的黑猫警长】
初始化,尾插(头插类似,相当于前一位的尾插),遍历,插入,删除,判空
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct dnode{ //定义数据类型
int data;
struct dnode *prior,*next; //双向链表有两个指针!
}dnode,*dlinklist;
bool initdlinklist(dlinklist &l) //初始化双向链表
{
l=(dnode *)malloc(sizeof(dnode));
if(l==NULL)
return 0;
l->prior=NULL;
l->next=NULL; //头指针和尾指针都置null
return 1;
}
bool empty(dlinklist l) //判断链表非空
{
if(l->next==NULL)
return 1;
else
return 0;
}
bool insertdlinklist(dlinklist &l,int i,int e) //插入操作
{
int j=0;
dnode *p,*s;
p=(dnode *)malloc(sizeof(dnode));
p=l;
while(p->next!=NULL&&j<i-1)
{
j++;
p=p->next;
}
if(p==NULL||j!=i-1) //健壮代码
return 0;
s=(dnode *)malloc(sizeof(dnode));
s->data=e;
s->next=p->next;
if(p->next!=NULL)
p->next->prior=s;
p->next=s;
s->prior=p;
return 1;
}
bool deletedlinklist(dlinklist &l,int i,int &e) //删除操作
{
int j=0;
dnode *p;
p=(dnode *)malloc(sizeof(dnode));
p=l;
while(p->next!=NULL&&j<i)
{
j++;
p=p->next;
}
if(p==NULL||j!=i) //健壮代码
return 0;
e=p->data;
if(p->prior!=NULL)
p->prior->next=p->next;
if(p->next!=NULL) //判断是否为最后
p->next->prior=p->prior;
free(p);
return 1;
}
dlinklist dlinklist_tailinsert(dlinklist &l) //尾插
{
int x;
dnode *p,*s;
p=(dnode *)malloc(sizeof(dnode));
p=l;
cin>>x;
while(x!=0)
{
s=(dnode *)malloc(sizeof(dnode));
s->data=x;
s->next=NULL;
p->next=s;
s->prior=p;
p=s;
cin>>x;
}
return l;
}
void lookdlinklist(dlinklist l) //遍历
{
dnode *p;
int j=1;
p=(dnode *)malloc(sizeof(dnode));
p=l->next;
while(p!=NULL)
{
cout<<"number "<<j<<" is "<<p->data<<" , ";
j++;
p=p->next;
}
cout<<endl;
}
int main() {
dlinklist l;
if(initdlinklist(l))
cout<<"initdlinklist succeed"<<endl;
if(empty(l))
cout<<"dlinklist is empty!"<<endl;
else cout<<"dlinklist not empty!"<<endl;
dlinklist_tailinsert(l);
if(empty(l))
cout<<"empty"<<endl;
else cout<<"not empty"<<endl;
lookdlinklist(l);
if(insertdlinklist(l,2,88)&&(insertdlinklist(l,4,99)))
cout<<"insertdlinklist succeed\n";
else cout<<"insertdlinklist faild\n";
lookdlinklist(l);
int e=0;
if(deletedlinklist(l,2,e))
cout<<"deletedlinklist succeed,delete element is "<<e<<endl;
else cout<<"delete error"<<endl;
lookdlinklist(l);
cout << "over\n";
return 0;
}
边栏推荐
- Penetration test 2 --- XSS, CSRF, file upload, file inclusion, deserialization vulnerability
- E. Breaking the Wall
- 【高老师UML软件建模基础】20级云班课习题答案合集
- Auto.js入门
- JS调用摄像头
- Borg Maze (BFS+最小生成树)(解题报告)
- Find 3-friendly Integers
- 【练习-11】4 Values whose Sum is 0(和为0的4个值)
- Penetration test (8) -- official document of burp Suite Pro
- Alice and Bob (2021 Niuke summer multi school training camp 1)
猜你喜欢
Information security - Analysis of security orchestration automation and response (soar) technology
[teacher Gao UML software modeling foundation] collection of exercises and answers for level 20 cloud class
Web based photo digital printing website
[exercise-5] (UVA 839) not so mobile (balance)
Information security - threat detection - Flink broadcast stream broadcaststate dual stream merging application in filtering security logs
差分(一维,二维,三维) 蓝桥杯三体攻击
信息安全-威胁检测引擎-常见规则引擎底座性能比较
Optimization method of path problem before dynamic planning
Matlab comprehensive exercise: application in signal and system
7-1 懂的都懂 (20 分)
随机推荐
对iptables进行常规操作
Opencv learning log 30 -- histogram equalization
B - 代码派对(女生赛)
想应聘程序员,您的简历就该这样写【精华总结】
Opencv learning log 33 Gaussian mean filtering
【练习4-1】Cake Distribution(分配蛋糕)
Penetration test (3) -- Metasploit framework (MSF)
Record of force deduction and question brushing
【练习-9】Zombie’s Treasure Chest
HDU - 6024 Building Shops(女生赛)
Opencv learning log 13 corrosion, expansion, opening and closing operations
Opencv learning log 18 Canny operator
China's earthwork equipment market trend report, technical dynamic innovation and market forecast
7-1 懂的都懂 (20 分)
Penetration test (1) -- necessary tools, navigation
Borg Maze (BFS+最小生成树)(解题报告)
F - Birthday Cake(山东省赛)
Nodejs crawler
Alice and Bob (2021 Niuke summer multi school training camp 1)
Find 3-friendly Integers