20140502 static_cast和dynamic_cast的类型检查 双链表建立,删除,打印
1、static_cast和dynamic_cast的类型检查
- static_cast的类型检查:只检查无关类之间的转换
CBaseY* pY1 = static_cast<CBaseY*>(pX); // 错误,编译未通过, 类型指向是无关的 (解释:指针变量PX是CBaseX类,现在要将其转换为CBaseY类(和CBasex毫无关系))
- dynamic_cast的类型检查是全面的(父类是否有虚函数),包括无关类的检查,失败返回0。
CBaseY* pY1 = dynamic_cast<CBaseY*>(pX); // pY最终等于0(编译通过,但是转换未成功),前提是pX必须包含虚函数
2、双链表建立,删除,打印
#include<iostream>
#include<stdio.h>
#include <string>
#include<conio.h> typedef struct student
{
int data;
struct student *next;
struct student *pre;
}dnode; dnode *create() //尾插法建立带头结点的双链表
{
dnode *head,*p,*s;
int x=;
head=(dnode *)malloc(sizeof(dnode));
head->data=;
head->pre=NULL;
head->next=NULL;
p=head;
printf("please input data (end by 0):");
scanf("%d",&x);
while(x!=)
{
s=(dnode *)malloc(sizeof(dnode));
s->data=x;
s->pre=p;
s->next=p->next;
p->next=s;
p=s;
printf("please input data (end by 0):");
scanf("%d",&x);
}
return head;
}; void delnode(dnode *head,int num)
{
dnode *p=head->next;
while(p!=NULL)
{
if(num==p->data)
{
p->pre->next=p->next;
if(p->next!=NULL) //最后一个节点
p->next->pre=p->pre;
free(p);
break;
}
p=p->next;
}
printf("could not find the node\n");
} void display1(dnode *head) //正向打印
{
dnode *p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void display2(dnode *head)//反向打印
{
dnode *p=head;
while(p->next!=NULL)
{
p=p->next;
}
while(p->pre!=NULL)
{
printf("%d ",p->data);
p=p->pre;
}
printf("\n");
} void main()
{
dnode *head=create();
delnode(head,);
display1(head);
display2(head);
}
20140502 static_cast和dynamic_cast的类型检查 双链表建立,删除,打印的更多相关文章
- 在单链表和双链表中删除倒数第K个节点
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“在单链表和双链表中删除倒数第K个节点”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解 ...
- 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...
- 在单链表和双链表中删除倒数第k个结点
题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 解答: 让链表从头 ...
- [算法]在单链表和双链表中删除倒数第k个结点
题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 解答: 让链表从头 ...
- 算法总结之 在单链表和双链表中删除倒数第k个节点
分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点 思路: 如果链表为空,或者k<1 参数无效 除此之外 让链表从头开始走到尾,每移动一步,就让k的值减1 ...
- 左神算法书籍《程序员代码面试指南》——2_02在单链表和双链表中删除倒数第k个字节
[题目]分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点.[要求]如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1).[题解]从头遍历链表, ...
- c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿
c++中的强制转换static_cast.dynamic_cast.reinterpret_cast的不同用法儿 虽然const_cast是用来去除变量的const限定,但是static_cast ...
- static_cast与dynamic_cast转换 最简单的理解
3.1 static_cast用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检 ...
- static_cast,const_cast,dynamic_cast,reinterpret_cast
除非必要,尽量不要对变量进行强制转换.这是因为强制转换是存在风险的,但实际上在某种情况下,转型是必需的. 旧式C转型方式为(type)expression,即由一对小括号加上一个对象名称组成,而这种语 ...
随机推荐
- mysql|tomcat|nginx|redis在docker中的部署
MySQL部署 拉取MySQL镜像 docker pull mysql 查看镜像 创建MySQL容器 docker run -di --name pinyougou_mysql -p 33306:33 ...
- switch type 类型判断
golang 语言中 也有 类是 javascript 的 typeof 判断类型的 方法 比如 func (a interface{}){ //第一种 if inst,ok:=a.(TypeA);o ...
- .gitignore 文件使用说明
我们在使用 Git 进行版本控制的时候,有些文件是无需纳入 Git 管理的,通常都是些自动 生成的文件,像日志或者编译过程中创建的文件.我们可以创建一个名为 .gitignore 的文件,列出要忽略的 ...
- thinkphp ajax调用demo
http://files.cnblogs.com/files/jxkshu/tp_ckgd.rar
- HDU 6697 Closest Pair of Segments (计算几何 暴力)
2019 杭电多校 10 1007 题目链接:HDU 6697 比赛链接:2019 Multi-University Training Contest 10 Problem Description T ...
- scala 列表List
列表: 列表是不可变,也就是说不能通过赋值改变列表的元素: 列表有递归结构,而数据是连续的 List 类型:List() 同样也是List(String) 列表是基于Nil (是空的)和::(列表从前 ...
- 深入理解JAVA虚拟机原理之内存分配策略(二)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 1.对象优先在Eden分配 大多情况,对象在新生代Eden区分配.当Eden区没 ...
- java线程池和五种常用线程池的策略使用与解析
java线程池和五种常用线程池策略使用与解析 一.线程池 关于为什么要使用线程池久不赘述了,首先看一下java中作为线程池Executor底层实现类的ThredPoolExecutor的构造函数 pu ...
- 洛谷 P2652 同花顺(离散化)
洛谷 P2652 同花顺(题面) 手动模拟了一下,其实离散化排序可以起很大作用题目要求花色相同,数字连续,那么我们要做的就是找一种花色,并提取出其中一串数字留下那些舍弃的牌换成相应花色,并和之前留下的 ...
- 使用promise构建一个向服务器异步数据请求
function getJSON(Url){ return new Promise((resolve,reject)=>{ request= new XMLHttpRequest(); requ ...