精华内容
下载资源
问答
  • *题目:已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为o(n)、空间复杂度为o(1)的算法, * 该算法可删除线性表中所有值为item的数据元素。 *编译环境:VC 6.0 */ #include <stdio.h> #...
    /*数据结构与算法-第二章线性表课后习题
    *课本第53页2.10
    *题目:已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为o(n)、空间复杂度为o(1)的算法,
    *     该算法可删除线性表中所有值为item的数据元素。
    *编译环境:VC 6.0
    */
    #include <stdio.h>
    #include <stdlib.h>
    #define ERROR -1
    #define MAXSIZE 5
    #define OVERFLOW -1
    #define OK 1
    #define listIncrement 2
    #define num_stop -1
    typedef int elemType;
    
    typedef struct
    {
    	elemType *elem;
    	int length;
    	int listsize;
    }Sqlist;
    int initList(Sqlist &list)
    {
    	list.elem=new int[MAXSIZE];
    	if(!list.elem)
    		exit(OVERFLOW);
    	list.length=0;
    	list.listsize=MAXSIZE;
    	return OK;
    }
    int ListInsert(Sqlist &list,int i,int num)
    {
    	int *newbase;
    	if(i<1)return ERROR;
    	if(list.length==list.listsize)//即将超越数组大小时重新动态分配数组大小
    	{
    		newbase=(int*)realloc(list.elem,(list.listsize+listIncrement)*sizeof(int));
    		if(!newbase)
    			exit(OVERFLOW);
    		list.elem=newbase;
    		list.listsize+=listIncrement;
    	}
    	list.elem[i-1]=num;
    	++list.length;
    	return OK;
    }
    void printList(Sqlist list)/*用于测试数据是否存储入顺序表*/
    {
    	for(int k=0;k<list.length;k++)
    		printf("%d ",list.elem[k]);
    }
    void deleteList(Sqlist &list,int num)
    {
    	int len=list.length;
    	elemType *str=list.elem;
    	int front=0;
    	while(front<len)
    	{
    		while(front<len && str[front]!=num)
    			front++;//值不为num时,指针右移,为从顺序表开头一直顺数到为num的元素
    		if(front<len)
    			while(front<len && str[len]==num)
    				len--;//为需要删除的数字时,线性表长度减1,为从顺序表尾部删除尾部连续的为num的元素
    		if(front<len)
    		{
    			str[front]=str[len-1];//题目仅要求删去值为num的元素,并未要求元素顺序排列不变,因此大胆猜想将靠后的元素往前移动
    			front++;//前指针右移
    			len--;//后指针左移
    			list.length--;//变换一次,顺序表长度-1
    		}
    	}
    }
    int main()
    {
    	Sqlist list1;
    	int flag;
    	int num,count=0;
    	flag=initList(list1);
    	printf("请输入若干数字,并以%d结束:",num_stop);
    	scanf("%d",&num);
    	count++;
    	while(num!=-1)
    	{
    		flag=ListInsert(list1,count,num);
    		scanf("%d",&num);
    		count++;
    	}
    	printList(list1);printf("\n");
    	printf("需要删除的数字为:");
    	scanf("%d",&num);
    	deleteList(list1,num);
    	printf("删除后的线性表为:");
    	printList(list1);
    	printf("\n");
    	return 0;
    }
    
    展开全文
  • #include <stream> using namespace std; typedef int ElemType;// 自定义了一个数据类型Elemtype,这里定义的Elemtype和int型是一样的 ...typedef struct//typedef是定义类型的意思, ...//存储空间的基地址 .....
    #include   <stream>
    using namespace std;
    typedef int ElemType;// 自定义了一个数据类型Elemtype,这里定义的Elemtype和int型是一样的
    //定义
    #define MAXSIZE 100
    typedef struct//typedef是定义类型的意思, 
    {
    ElemType *elem;//存储空间的基地址 , 用“elemtype”代表所有可能的数据类型,简单明了的概括了整体。在算法中,除特别说明外,规定ElemType的默认是int型。
    int length;//当前长度 
    }SqList;//sqlist代表上面的结构体类型 ,顺序表的顺序存储结构类型为sqlist 
    //创建
    void CreateList(SqList &L)//构造一个空的线性表L 
    {
        int i;
        L.elem=new ElemType[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间 ,使elem指向这段空间的基地址 ,L.elem是一个指针变量 
        if(!L.elem) cout<<"创建失败!"<<endl;//存储分配失败退出 
        cout<<"请输入线性表的长度,不能大于"<<MAXSIZE<<':'<<endl; cin>>L.length;
        cout<<"请依次输入表中元素:"<<endl;
        for(i=0;i<L.length;i++)
            cin>>L.elem[i];//从头到尾依次输入每个元素 
        cout<<"创建完成!"<<endl;
    }
    //输出表
    void display(SqList L)
    {
        int i;
        cout<<'[';
        for(i=0;i<L.length;i++)
            {if (i==L.length-1)cout<<L.elem[i];
            else cout<<L.elem[i]<<',';}//控制输出的格式 即数据的两个有括号 
        cout<<']'<<endl;
    }
     
    void ChooseList_L(SqList &L,int item)
    {
        int i=0;int j=0;int k;int count=0;
        for(k=0;k<L.length;)
        {
            if(L.elem[k]!=item)
            {
                L.elem[j]=L.elem[i];
                i++;
                j++;
                k++; 
            }
            else
            {
                i++;
                 k++; 
                count++;
            }//i,k的数值一直保持相等,j中的数值才是满足题意的数值 
     
        }
        L.length-=count;
         cout<<"线性表中与item相等的数值的个数为:"<<endl;
        cout<<count<<endl;
    	 
    }
    int main()
    {
        SqList L;int item;
     
        CreateList(L);//线性表L已经存在?????、/、/、???????/、??、、、? 
        cout<<"当前线性表为:"<<endl;
        display(L);
     
        cout<<"删除表中所有值为item的数据元素,请输入item:"<<endl;
        cin>>item;
     
        ChooseList_L(L,item);
     
        cout<<"选择删除后线性表为:"<<endl;
        display(L);
     
        return 0;
    }
    //1、结构体用法
    //struct Student{
    //int age;
    //char s;
    //}
    //如果要定义一个该结构体变量,就需要:struct Student st1;
    //有没有觉得很麻烦,我们隐隐约约察觉到,多写一个struct很费劲,因此才有了下面的typedef
    //2、如果我们使用
    //typedef struct Student{
    //int age;
    //char s;
    //}Stu
    //那么我们定义该结构体变量的时候,就可以使用
    //Stu st1;
    //有没有觉得很省事,的确是这样。但是,还可以更省事,请看下面:
    //3、
    //我们也可以直接省略掉Student
    //typedef struct{
    //int age
    //char s;
    //}Stu;
    //就可以直接使用 Stu st1;
    
    
    
    展开全文
  • 计算机为什么采用二进制?

    万次阅读 2019-11-06 10:27:09
    计算机运算基础采用二进制。 电脑的基础是二进制,那么,什么是二进制呢,为什么需要二进制呢?在早期设计的机械计算装置中,使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算...

    要回答这个问题,首先让我们了解一下二进制概述以及其发展 。

    进制是逢2进位的进位制,0、1是基本算符;计算机运算基础采用二进制。

    电脑的基础是二进制,那么,什么是二进制呢,为什么需要二进制呢?在早期设计的机械计算装置中,使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算装置可能更加接近人类的思想方式。比如说一个计算设备有十个齿轮,它们级连接起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格。这就是一个简单的十位十进制的数据表示设备了,可以表示0到999999999的数字。 配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。

    这种通过不同的位置上面不同的符号表示数值的方法就是进制表示方法。常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。 电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。 常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。

    二进制的“00101000”直接可以转换成16进制的“38”。 一个字是电脑中的基本存储单元,根据计算机字长的不同,字具有不同的位数,现在的计算机字长一般是32位或64位的。以32位为例,也就是说,一个字的位数是32。字节是8位的数据单元,一个字节可以表示0-255的数据。对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。

     

    计算机使用二进制有一下优点:

    1、电路中容易实现 :当计算机工作的时候,电路通电工作,于是每个输出端就有了电压。电压的高低通过模数转换即转换成了二进制:高电平是由1表示,低电平由0表示。也就是说将模拟电路转换成为数字电路。这里的高电平与低电平可以人为确定,一般地,2.5伏以下即为低电平,3.2伏以上为高电平。二进制数码只有两个(“0”和“1”)。电路只要能识别低、高就可以表示“0”和“1”。

    2、物理上最易实现存储 :

    (1)基本道理:二进制在物理上最易实现存储,通过磁极的取向、表面的凹凸、光照的有无等来记录。

    (2)具体道理:对于只写一次的光盘,将激光束聚住成1--2um的小光束,依靠热的作用融化盘片表面上的碲合金薄膜,在薄膜上形成小洞(凹坑),记录下“1”,原来的位置表示记录“0”。

    3、便于进行加、减运算和计数编码。易于进行转换,二进制与十进制数易于互相转换。

    简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。电子计算机能以极高速度进行信息处理和加工,包括数据处理和加工,而且有极大的信息存储能力。数据在计算机中以器件的物理状态表示,采用二进制数字系统,计算机处理所有的字符或符号也要用二进制编码来表示。用二进制的优点是容易表示, 运算规则简单,节省设备。人们知道,具有两种稳定状态的元件(如晶体管的导通和截止,继电器的接通和断开,电脉冲电平的高低等)容易找到,而要找到具有10种稳定状态的元件来对应十进制的10个数就困难了

    4、便于逻辑判断(是或非)。适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。二进制的两个数码正好与逻辑命 题中的“真(Ture)”、“假(False)或称为”是(Yes)、“否(No)相对应。

    5、用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。

     

    这里写图片描述

    展开全文
  • 为什么采用 UDP 协议,而不采用 TCP 协议实现? 登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。 QQ对于普通用户是采用UDP协议,对于会员用TCP协议 总来的说: ...

    为什么采用 UDP 协议,而不采用 TCP 协议实现?

     

    登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。

    QQ对于普通用户是采用UDP协议,对于会员用TCP协议

    总来的说:

    1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。
    2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。

    3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。

     

    首先,QQ并不是完全基于UDP实现。比如在使用QQ进行文件传输等活动的时候,就会使用TCP作为可靠传输的保证。
    使用UDP进行交互通信的好处在于,延迟较短,对数据丢失的处理比较简单。同时,TCP是一个全双工协议,需要建立连接,所以网络开销也会相对大。如果使用QQ语音和QQ视频的话,UDP的优势就更为突出了,首先延迟较小。最重要的一点是不可靠传输,这意味着如果数据丢失的话,不会有重传。因为用户一般来说可以接受图像稍微模糊一点,声音稍微不清晰一点,但是如果在几秒钟以后再出现之前丢失的画面和声音,这恐怕是很难接受的。

     

    TCP和UDP都是传输层协议,QQ的消息为应用层内容,需要通过传输协议封装传输。
    TCP为可靠的面向连接协议,建立TCP连接需要两端三次握手协商(双方在线)。
    UDP为不可靠的无连接协议,数据传输出去,无需连接两端,确认是否到达(对端可以不在线)。
    QQ采用UDP协议提高了消息传输的效率,无需两端建立连接,即使对端不在线也能传输消息。

     

    UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,

    必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。

    展开全文
  • 基于linux的socket多人聊天室程序,采用posix多线程控制技术。客户端和服务器采用协议机制通信,服务器端在用户上线和下线时及时更新在线人数,并打印上下线信息(用户名)。客户端登陆需要输入用户名,若用户名已...
  • 题外话:熟悉本公众号的老朋友应该知道,本号的主要理念不是告诉你怎么做,而是告诉你为什么。...计算机运算基础采用二进制。 电脑的基础是二进制,那么,什么是二进制呢,为什么需要二进制呢?在早期设计的机械计算...
  • 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适?(北京航空航天大学,1999) A. 前序 B. 中序 C. 后序 D. 层次 答案 用二叉链表存储结构也就是左孩子右兄弟的...
  • #include <bits/stdc++.h> #include "Btree.cpp" using namespace std; int Height(BTNode *bt) { if(bt == NULL) return 0; int lh = Height(bt->lchild); int rh = Height(bt-&... retur...
  • 如果你的网站配置了ssl证书后有这样的提示,觉得不好,需要在服务器调整加密套件,使用更新的更强大安全的加密套件。 IIS(Windows Server): 下载IISCrypto 命令行运行gpedit,计算机配置-管理模板-网络-SSL配置...
  • 假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用直写(Write Throght)方式,则能存放32K字数据的cache的总容量至少应有( )位。 得分/总分 A. ...
  • #include <bits/stdc++.h> #include "Btree.cpp" using namespace std; int Nodes(BTNode *bt){ int n = 0; if(bt == NULL) return 0; if(bt->lchild != NULL &... n...
  • 计算机中采用二进制主要原因

    千次阅读 2019-09-26 13:42:15
    技术实现简单,计算机由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用”1”和”0”表示 简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机...
  •      ... 错误:windows无法安装到这个磁盘 选中的磁盘采用GPT分区形式       解决办法:           win8/win10系统均添加快速...
  • 采用邻接矩阵表示法创建无向网

    千次阅读 多人点赞 2018-12-03 10:47:20
    cout ************采用邻接矩阵表示法创建无向网**************" ; AMGraph G; CreateUDN(G); cout *****邻接矩阵表示法创建的无向网*****" ; for(i = 0 ; i ; ++i) { for(j = 0; j ; ++j) { if(G.arcs[i...
  • 其中,某指令的一个操作数的机器数为ABCD00FFH,该操作数采用基址寻址方式,指令中形式地址(用补码表示)为FF00H,当前基址寄存器的内容为C000 0000H,则该操作数的LSB(即FFH)存放的地址是()。 问题1选项 A.C...
  • 某操作系统采用可变分区分配存储管理方法,用户区为512K且始址为0,用空闲分区表管理空闲分区。若分配时采用分配空闲低地址部分的方案,其初始时用户区的512K空间空闲,对下述申请序列:申请300K,申请100K,释放...
  • 安装系统时出现“windows无法安装到这个磁盘,选中的的磁盘采用GPT分区形式”解决方法如下内: 在系统提示无法安装的那一步,按住“shift+f10”,呼出“cmd”命令符,即小黑窗。 然后输入“diskpart”代码,并点击...
  • 系统采用可变分区方式管理内存:对打印机采用静态分配,并假设输入输出操作的时间忽略不计;采用最短剩余时间优先的进程调度算法,进程剩余执行时间相同时采用先来先服务算法;进程调度时机选择在执行进程结束时或有新...
  • 7.某计算机的控制器采用微程序控制方式,微指令中的操作控制字段的16位采用混合表示法,其中用11位采用直接表示法,另外5位分为3位和2位的编码表示法,则此格式的微指令最多可表示多少个微指令? 解: ------直接...
  • 2018去除"自豪地采用 WordPress

    万次阅读 2018-01-09 13:36:30
    2018如果采用的是twentyseventeen主题,请打开入径WordPress\wp-content\themes\twentyseventeen \footer.php并打开 查看一下一句语句,接下来我们搜索twentyseventeen文件夹内包含 "info"的文件 get_template_...
  • 如何删除"自豪地采用WordPress

    千次阅读 2018-07-25 14:02:59
    使用WordPress默认主题时, 在主题的左下方将会出现”自豪地采用WordPress”字样, 这简直是不能忍受的, 那么, 我们应该怎样把这行字以及链接去掉呢? 我在网上找了好多片文章, 但是发现都跟我的有点不一样, 可能是...
  • 选中的磁盘采用GPT分区形式”,导致安装失败,下面就来讲解一下如何解决。 解决步骤: 在系统提示无法安装的那一步,按住“shift+f10”,呼出“cmd”命令符,即小黑窗。 输入:diskpart,回车; 进入diskpart。 输入...
  • 5·假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树的高度。 LeetCode104. 二叉树的最大深度 思路:层次遍历,看一共有多少层 int maxDepth(TreeNode* root) { int d = 0; if(root){ queue<...
  • 题目:一颗具有n个结点的二叉树采用顺序储存结构,编写算法对该二叉树进行前序遍历 C++实现如下: #include<iostream> using namespace std; class SeqTree { public: SeqTree(int n) { Creat(n); }//构造...
  • 当装系统时遇到“选中的磁盘采用GPT分区形式”  目前市面上的很多笔记本出厂时就自带了系统,大多自带的是windows7家庭版的,自带的系统往往里面预装了很多程序,造成系统运行速度缓慢,所以很多朋友想重新换个...
  • 假设二叉树采用二叉链存储结构存放,结点值为 int 类型,设计一个递归算法求二叉树 bt 中所有叶子结点值之和 //假设二叉树采用二叉链存储结构存放,结点值为 int 类型,设计一个递归算法求 //二叉树 bt 中所有叶子...
  • #include <bits/stdc++.h> using namespace std; void MaxMin(int a[], int l, int r, int &maxe, int &mine){ int mid; if(l == r){ //只有一个元素 maxe = a[l];... else if(l == ...
  • 采用普里姆算法求最小生成树

    千次阅读 2018-12-08 17:27:14
    目的:领会普里姆算法求带权连通图中最小生成树的过程和相关算法设计。 内容:编写一个程序exp8-5.cpp,实现求带权连通图最小生成树的普里姆算法。对于如图8.55所示的带权连通图G,输出从顶点0出发的一颗最小生成树...
  • 1.在系统提示无法安装的那一步,按住“shift+f10”,呼出“cmd”命令符 2.输入:diskpart,回车 进入diskpart 3.输入:list disk,回车 显示磁盘信息 4.输入:select disk 0,回车 ...6.输入:convert ...
  • 采用CRC的生成多项式是P(x)=x^3+1 。试求应添加在数据后面的余数。 答:因为P(x)=x^3+1,x3对应1000,1对应1,所以除数为1001,除数有4位,所以n=4-1=3,所以被除数后面需要补3个0,即被除数为101110000。除法计算...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,905,613
精华内容 1,962,245
关键字:

采用