精华内容
下载资源
问答
  • 2.文件物理结构可采用显式链接或其他方法。 3.磁盘空闲空间管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。 4.文件目录结构采用多用户...
  • 包括不包括首部或尾部等开销在内? 问题4-34:如果一个路由器要同时连接在一个以太网和一个ATM网络上,需要有什么样硬件加到路由器上? 问题4-35:教材中图4-19B类网络145.13.0.0在划分子网时,所给出三个子...
  • 包含UML常见的所有的图形:类图、对象图、包图、用例图、时序图、协作图、交互图、活动图、状态图、组件图、复合结构图、部署图(配置图)。OOM 本质上是软件系统的一个静态的概念模型。 5. 业务程序模型 (BPM) ...
  • 15.2.3 使用外部表加载不同的文件 622 15.2.4 多用户问题 623 15.2.5 外部表小结 624 15.3 平面文件卸载 624 15.4 数据泵卸载 631 15.5 小结 633 第16章 数据加密 634 16.1 加密类型 634 16.1.1 动态数据 ...
  • 303.软盘上的文件开 304.软驱灯长亮 305.挽救坏软盘中的数据 306.写软盘零磁道损坏 307.找到扇区或是错误的扇区 308.软盘坏道导致读写错误 309.软盘不易取出 310.软驱显示上一张软盘的内容 311.显示“磁盘未...
  • 单向有头循环链表

    2018-09-22 23:09:39
    链表是一种常见的基础数据结构,是一种线性表,是一种物理存储单元上非连续、非顺序的存储结构。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括存储数据元素的数据域和...

    链表是一种常见的基础数据结构,是一种线性表,是一种物理存储单元上非连续、非顺序的存储结构。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括存储数据元素的数据域和存储下一个结点地址的指针域两个部分。 相比于线性表顺序结构,操作复杂。数据元素的逻辑顺序也是通过链表中的指针链接次序实现的。

    给出头文件:

    #ifndef __SLIST_H__
    #define __SLIST_H__
    
    #include <stdio.h>
    #include <assert.h>
    #include <stdlib.h>
    
    typedef int DataType;
    typedef struct Node
    {
    	DataType data;        //数据域
    	struct Node* next;	  //指针域
    }Node;     //节点的结构体
    
    //打印
    void SListPrint(Node *pFirst);
    // 初始化 
    void SListInit(Node **ppFirst);
    // 尾部插入 
    void SListPushBack(Node** ppFirst, DataType data);
    // 头部插入 
    void SListPushFront(Node **ppFirst, DataType data);
    // 尾部删除 
    void SListPopBack(Node **ppFirst);
    // 头部删除 
    void SListPopFront(Node **ppFirst);
    // 给定结点插入,插入到结点前 
    void SListInsert(Node **ppFirst, Node *pos, DataType data);
    // 给定结点删除 
    void SListErase(Node **ppFirst, Node *pos);
    // 按值删除,只删遇到的第一个 
    void SListRemove(Node **ppFirst, DataType data);
    // 按值删除,删除所有的 
    void SListRemoveAll(Node **ppFirst, DataType data);
    // 销毁 
    void SListDestroy(Node **ppFirst);
    // 按值查找,返回第一个找到的结点指针,如果没找到,返回 NULL 
    int SListFind(Node *pFirst, DataType data);
    
    #endif __SLIST_H__
    

    接下来就实现如上功能

    #include "SList.h"
    
    void SListInit(Node **ppFirst)
    {
    	assert(ppFirst);
    	*ppFirst = NULL;
    }
    
    void SListPrint(Node *pFirst)
    {
    	Node* cur = pFirst;
    	while (cur != NULL)
    	{
    		printf("%d--->", cur->data);
    		cur = cur->next;
    	}
    	printf("NULL\n");
    }
    
    Node* NewNode(DataType data)
    {
    	Node *node = (Node *)malloc(sizeof(Node));
    	node->data = data;
    	node->next = NULL;
    	return node;
    }
    
    //尾插
    void SListPushBack(Node** ppFirst, DataType data)
    {
    	Node *node = NewNode(data);
    	assert(ppFirst != NULL);
    	if (*ppFirst == NULL) 
    	{
    		*ppFirst = node;
    		return;
    	}
    	// 找链表中的最后一个结点	(链表中至少有一个结点)
    	Node *cur = *ppFirst;
    	while (cur->next != NULL) 
    	{
    		cur = cur->next;
    	}
    	cur->next = node;
    }
    
    //头插
    void SListPushFront(Node **ppFirst, DataType data)
    {
    	assert(ppFirst != NULL);
    	// 正常情况
    	Node *node = NewNode(data);
    	node->next = *ppFirst;
    	*ppFirst = node;
    }
    
    //尾删
    void SListPopBack(Node **ppFirst)
    {
    
    	assert(ppFirst != NULL);
    	assert(*ppFirst != NULL);	// 链表不是空链表
    	if ((*ppFirst)->next == NULL) {
    		free(*ppFirst);
    		*ppFirst = NULL;
    		return;
    	}
    	// 链表中至少有两个结点,才能找倒数第二个
    	Node *cur = *ppFirst;
    	while (cur->next->next != NULL) {
    		cur = cur->next;
    	}
    	free(cur->next);
    	cur->next = NULL;
    }
    
    //头删
    void SListPopFront(Node **ppFirst)
    {
    	assert(ppFirst != NULL);
    	assert(*ppFirst != NULL);	// 链表不是空链表
    
    	Node *first = *ppFirst;
    	*ppFirst = (*ppFirst)->next;
    	free(first);
    }
    
    // 给定结点插入,插入到结点前 
    void SListInsert(Node **ppFirst, Node *pos, DataType data)
    {
    	if (*ppFirst == pos) {
    		SListPushFront(ppFirst, data);
    		return;
    	}
    	Node *newNode = NewNode(data);	// *** 不要忘了申请空间
    	Node *cur;
    	// 找到 pos 前的一个结点
    	for (cur = *ppFirst; cur->next != pos; cur = cur->next) {}
    
    	// 改变的是字段内的值,而不是指针的值
    	cur->next = newNode;
    	newNode->next = pos;
    }
    
    // 给定结点删除   (pos一定在链表中)
    void SListErase(Node **ppFirst, Node *pos)
    {
    	if (*ppFirst == pos) {
    		SListPopFront(ppFirst);
    		return;
    	}
    
    	Node *cur = *ppFirst;
    	while (cur->next != pos) {
    		cur = cur->next;
    	}
    	cur->next = pos->next;
    	free(pos);	// 不要忘记释放结点
    }
    
    // 按值删除,只删遇到的第一个 
    void SListRemove(Node **ppFirst, DataType data)
    {
    	Node* node = NULL;
    	Node* cur = NULL;
    	node = *ppFirst;
    	if (*ppFirst == NULL)
    	{
    		return;
    	}
    	else
    	{
    		while ((node->next)->data != data)
    		{
    			node = node->next;
    		}
    		cur = node->next;
    		node->next = cur->next;
    		free(cur);
    	}
    }
    
    // 按值删除,删除所有的 
    void SListRemoveAll(Node **ppFirst, DataType data)
    {
    
    	Node* node = NULL;
    	Node* cur = NULL;
    	node = *ppFirst;
    	if (*ppFirst == NULL)
    	{
    		return;
    	}
    	else
    	{
    		while (node->next)
    		{
    			if ((node->next)->data == data)
    			{
    				cur = node->next;
    				node->next = cur->next;
    				free(cur);
    				cur = NULL;
    			}
    			else
    			{
    				node = node->next;
    			}
    		}
    		
    	}
    }
    
    // 销毁 
    void SListDestroy(Node **ppFirst)
    {
    	Node *cur, *next;
    	for (cur = ppFirst; cur != NULL; cur = next) {
    		next = cur->next;
    		free(cur);
    		cur = NULL;
    	}
    }
    
    // 按值查找,返回第一个找到的结点指针,如果没找到,返回 NULL 
    int SListFind(Node *pFirst, DataType data)
    {
    	for (Node *cur = pFirst; cur != NULL; cur = cur->next) {
    		if (cur->data == data) {
    			return cur;
    		}
    	}
    	return NULL;
    }
    

    程序测试及结果如下:

    #include "SList.h"
    
    void test()
    {
    	Node* list = NULL;//初始化链表
    	Node* pos = NULL;
    	printf("前插后:\n");
    	SListPushFront(&list, 1);
    	SListPushFront(&list, 2);
    	SListPushFront(&list, 3);
    	SListPushFront(&list, 4);
    	SListPushFront(&list, 5);
    	SListPrint(list);
    	
    	printf("后插后:\n");
    	SListPushBack(&list, 1);
    	SListPushBack(&list, 2);
    	SListPushBack(&list, 3);
    	SListPushBack(&list, 4);
    	SListPushBack(&list, 5);
    	SListPrint(list);
    	printf("前删和后删:\n");
    	
    	SListPopFront(&list);
    	SListPopFront(&list);
    	SListPopBack(&list);
    	SListPopBack(&list);
    	SListPrint(list);
    	//
    	printf("插入到指定位置:\n");
    	pos = SListFind(list, 2);
    	SListInsert(&list, pos, 100);
    	pos = SListFind(list, 3);
    	SListInsert(&list, pos, 0);
    	SListPrint(list);
    	
    	printf("删除指定位置:\n");
    	pos = SListFind(list,1);
    	SListErase(&list,pos );
    	SListPrint(list);
    	printf("按值删除,只删遇到的第一个:\n");
    	SListRemove(&list, 3);
    	SListPrint(list);
    	printf("按值删除,只删所有:\n");
    	SListRemoveAll(&list, 2);
    	SListPrint(list);
    	//printf("销毁链表!");
    	//SListDestory(&list);
    
    }
    
    
    int main()
    {
    	test();
    }
    

    在这里插入图片描述

    展开全文
  • 包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体例子来充分介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作,如何使用这个特性来开发...
  • 物理自然环境恶化是指网上会展信息系统物理基础支持能力下降或消失,包括电力供应不足或中断、电压波动、静电或强磁场影响,以及自然灾害发生等。 2、网上会展安全对策 会展网站信息网络安全防范包含以下...
  • 随着博客人数增加, Blog 作为一种新生活方式、新工作方式、新学习方式已经被越来越多人所接受,并且在改变传统网络和社会结构:网络信息不再是虚假可验证,交流和沟通更有明确选择和方向性,单一...
  • 9.1 数据库物理结构 383 9.1.1 文件文件组 383 9.1.2 分区与页 386 9.1.3 页中数据 388 9.1.4 分区 391 9.2 索引概览 393 9.3 基本索引结构 393 9.4 索引类型 395 9.4.1 聚集索引 395 9.4.2 非聚集...
  • 服务网关,对外暴露统一规范接口和包装响应结果,包括各个子系统交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。示例图: zheng-cms...
  • 超爽自学课件(java)

    2007-09-16 16:04:04
    为解决这个常见的程序设计问题,我们需要拥有一种能力,可在任何时间、任何地点创建任何数量的对象。本章的宗旨便是探讨在使用对象的同时用来容纳它们的一些Java工具:从简单的数组到复杂的集合(数据结构),如...
  • 在Oracle应用程序世界里,在中间层生成的文件能够,有时是需要放到数据库层。这些文件大多以文本文件的形式存在,包括配置信息。其他文件是与cloning相关的。 下面的图标有助于说明每层的主要组成部分。该图标来自...
  • 数据库系统中,数据的物理结构必须与逻辑结构一致 (10) 下列模式中,能够给出数据库物理存储结构与物理存取方法是(A) 注:P108 A. 内模式 B. 外模式 C. 概念模式 D. 逻辑模式 (11) 算法时间复杂度是指(C) A. ...
  • 章讨论其他形式,包括数组(存储多个同类型值)、结构(存储多个不同类型值)、指针(标识内存位置) 。读者还将学习如何创建和存储文本字符串及如何使用C—风格字符数组和C抖string类来处理文本输入和 输出。最后,...
  •  本书由多位工作在数据库维护一线工程师合著而成,包含了精心挑选数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善...
  • 章讨论其他形式,包括数组(存储多个同类型值)、结构(存储多个不同类型值)、指针(标识内存位置) 。读者还将学习如何创建和存储文本字符串及如何使用C—风格字符数组和C抖string类来处理文本输入和 输出。最后,...
  • 章讨论其他形式,包括数组(存储多个同类型值)、结构(存储多个不同类型值)、指针(标识内存位置) 。读者还将学习如何创建和存储文本字符串及如何使用C—风格字符数组和C抖string类来处理文本输入和 输出。最后,...
  • Loki :C++库的设计,包括常见的设计模式和习语的实现。 MiLi :只含头文件的小型C++库。 openFrameworks :开发C++工具包,用于创意性编码。 Qt :跨平台的应用程序和用户界面框架。 Reason :跨平台的框架,使...
  • 数据库系统中,数据的物理结构必须与逻辑结构一致 (10) 下列模式中,能够给出数据库物理存储结构与物理存取方法是______。(A) A. 内模式 B. 外模式 C. 概念模式 D. 逻辑模式 (11) 算法时间复杂度是指______。(C...
  • 分层DFD图可以用于可行性分析阶段,描述系统的物理结构。(×) 9. 信息建模方法是从数据角度来建立信息模型,最常用描述信息模型方法是E-R 图。(√) 10. 用于需求分析软件工具,应该能够保证需求...
  • 推荐一组合理的物理结构以降低工作负荷开销。从而提高数据库性能 数据库性能优化的常见问题 如何发现问题,如何分析导致性能降低原因仍然是数据库管理员要掌握知识。 事务占用资源时间过长,造成阻塞 ...
  • 一般而言,一个具体的应用必然要对应于智能卡中的一个文件,因此,智能卡中的文件不存在通常所谓的文件共享的情况。而且,这种文件不仅在逻辑广必须是完整的,在物理组织上也都是连续的。此外,智能卡中的文件尽管也...
  • 解决常见的引导问题 281 5.3 停机 286 5.4 本章总结 288 第6章 进程、线程和作业 289 6.1 进程的内部机理 289 数据结构 289 内核变量 297 性能计数器 297 有关的函数 298 6.2 CreateProcess的流程 300 阶段1:打开...
  • ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件 ISP:X-Internet签字文件 IST:数字跟踪设备文件 ISU:InstallShield卸装脚本 IT:脉冲跟踪系统音乐模块(MOD)文件 ITI:脉冲跟踪系统设备 ITS:...
  • 书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。  本书还提供了dba完成本职工作必备的基本的uniix...
  • oracle框架主要由物理结构、逻辑结构、内存分配、后台进程、oracle例程、系统改变号 (System Change Number)组成  物理结构 物理结构包含三种数据文件: 1) 控制文件 2) 数据文件 3) 在线重做日志文件  ...
  • Firebird数据库中文版

    热门讨论 2011-11-29 08:48:43
    Firebrid在常见的平台上都可运行,如Linux和Windows(包括Windows终端服务器)其它支持的平台包括(MAC OS(苹果机), Solaris及HP-UX) 把数据库从一个平台转到另一个平台,非常的容易,只要备份数据库,然后,再...
  • 兼顾深度与广度,不仅对实际问题现象、产生原因和相关原理进行了深入浅出讲解,更主要是,结合实际应用环境,提供了一系列解决问题思路和方法,包括详细操作步骤,具有很强实战性和可操作性。...
  • 2.1.1 计算节点的物理结构 2.1.2 大规模文件系统结构 2.2 Map-Reduce 2.2.1 Map任务 2.2.2 分组和聚合 2.2.3 Reduce任务 2.2.4 组合器 2.2.5 Map-Reduce执行细节 2.2.6 节点失效处理 2.3 使用Map-...

空空如也

空空如也

1 2 3 4
收藏数 62
精华内容 24
关键字:

常见的文件物理结构不包括