当前位置:首页 » 服务存储 » 串的其他存储结构的实现
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

串的其他存储结构的实现

发布时间: 2023-06-17 21:32:14

❶ c++串的顺序存储结构,尽量简单【四个功能,增删改查】

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedefstructNode
{
chardata;
structNode*next;
}node;

voidInsert(node*);//插入
voidFind(node*);//查找
intCount(node*);//链表长度
voidUpdate(node*);//修改
voidDelete(node*);//删除
voidShow(node*);//输出

intmain()
{
inta;
nodehead;
head.next=NULL;

printf("***********链表的操作************ ");

while(1)
{
a=0;
printf("***********请选择您的操作*********** ");
printf("1链表的插入 2链表的查找 3链表的修改 4链表的删除 5链表的输出 6退出系统 ");
scanf("%d",&a);

switch(a)
{
case1:
Insert(&head);
break;
case2:
Find(&head);
break;
case3:
Update(&head);
break;
case4:
Delete(&head);
break;
case5:
Show(&head);
break;
case6:
exit(-1);
break;
default:
printf("输入错误!");
break;
}

}
return0;
}

intCount(node*head)
{
node*pH=head;
intcount=0;
while(pH->next!=NULL)
{
pH=pH->next;
count++;
}

returncount;
}

voidInsert(node*head)
{
intwhich=0;
inti=0;
intj=1;
charch;
node*pH=head;

printf(" 1.首插入2.未插入3.插入到位置i ");
printf("请选择:");
scanf("%d",&which);
ch=getchar();
if(which==1)
{
printf("请输入值:");
scanf("%c",&ch);
node*q=(node*)malloc(sizeof(Node));
q->data=ch;
q->next=pH->next;
pH->next=q;
}
elseif(2==which)
{
while(pH->next!=NULL)
{
pH=pH->next;
}
printf("请输入值:");
scanf("%c",&ch);
node*q=(node*)malloc(sizeof(Node));
q->data=ch;
q->next=pH->next;
pH->next=q;
}
elseif(3==which)
{
printf("请输入i的值:");
scanf("%d",&i);
ch=getchar();
if((i>0)&&(i<=Count(head)+1))
{
printf("i=%d",i);
while(j<i)
{
pH=pH->next;
j++;
}
printf("请输入值:");
scanf("%c",&ch);
node*q=(node*)malloc(sizeof(Node));
q->data=ch;
q->next=pH->next;
pH->next=q;
}
else
{
printf("i输入错误! ");
}
}
else
{
printf("选择错误! ");
}

return;
}

voidShow(node*pH)
{
printf("链表输出: ");
if(pH->next==NULL)
{
printf("链表为空! ");
return;
}
else
{
while(pH->next!=NULL)
{
pH=pH->next;
printf("%3c",pH->data);
}
printf(" 输出结束! ");
}
}

voidFind(node*head)
{
intwhich=0;
intj=0;
inti=0;
charch;
boolis_have=false;
node*q=head->next;

if(Count(head)==0)
{
printf("链表为空!无法查找. ");
return;
}

printf("1.查找内容的位置2.查找位置的内容 ");
scanf("%d",&which);
ch=getchar();

if(1==which)
{
printf("请输入要查找的内容:");
scanf("%c",&ch);

while(q!=NULL)
{
j++;
if(q->data==ch)
{
printf("%c是第%d个。 ",ch,j);
is_have=true;
}
q=q->next;
}

if(is_have==false)
{
printf("所查找的内容在链表中不存在!");
}
}
elseif(2==which)
{
j=0;
printf("请输入要查找的位置:");
scanf("%d",&i);

if(i>Count(head)||i<1)
{
printf("位置错误!无法查找。 ");
return;
}

while(q!=NULL&&j<i-1)
{
q=q->next;
j++;
}
printf("内容为:%c",q->data);
}
else
{
printf("选择错误! ");
}

return;
}

voidUpdate(node*head)
{
node*q=head->next;
inti=0;
intj=0;
charch;

if(Count(head)==0)
{
printf("链表为空!无法查找. ");
return;
}

printf("请输入要修改的位置:");
scanf("%d",&i);
ch=getchar();
if(i>Count(head)||i<1)
{
printf("位置错误!无法修改。 ");
return;
}

printf("请输入修该的值:");
scanf("%c",&ch);
while(q!=NULL&&j<i-1)
{
q=q->next;
j++;
}
q->data=ch;
printf("修改成功! ");

return;
}

voidDelete(node*head)
{
node*q=head->next;
node*p=head;
inti=0;
intj=0;
charch;

if(Count(head)==0)
{
printf("链表为空!无法删除. ");
return;
}

printf("1.全部删除2.删除单个 ");
scanf("%d",&i);
ch=getchar();

if(1==i)
{
while(q!=NULL)
{
p=p->next;
q=q->next;
free(p);
}
head->next=NULL;
printf("释放成功! ");
}
elseif(2==i)
{
printf("请输入要删除的位置:");
scanf("%d",&i);
ch=getchar();
if(i>Count(head)||i<1)
{
printf("位置错误!无法删除。 ");
return;
}

while(q!=NULL&&j<i-1)
{
p=p->next;
q=q->next;
j++;
}
p->next=q->next;
free(q);

printf("删除成功! ");
}
else
{
printf("选择错误! ");
}

}

❷ 我是湖南邵阳职业技术学院的专科学生,学的是计算机科学与技术,然后明年升考吉首大学的 计算机科学与应用

《微机原理》考试大纲
第一章 概述
1.计算机中的数和编码系统
(1)理解计算机中的数制的概念,会应用;(2)掌握二进制编码的方法;
(3)掌握二进制运算的规则;(4)掌握带符号数的表示方法及表示范围;
2.了解计算机的硬件和软件的划分及功能
3.微型计算机的结构
(1)了解微型计算机的外部结构;
(2)了解微型计算机的内部结构;
4. Intel 8088的结构
(1)掌握8088的寄存器结构;(2)掌握8088的功能结构;
(3)掌握存储器组织;
第二章 8088的指令系统
1.掌握8088的寻址方式
(1)立即寻址(2)直接寻址(3)寄存器寻址(4)寄存器间接寻址(5)变址寻址(6)基址加变址的寻址方式
2.掌握8088标志寄存器中的9个标志位
3.掌握8088的指令系统
(1)数据传送指令(2)算术运算指令(3)逻辑运算指令
第三章 汇编语言程序设计
1.正确掌握汇编语言的格式;
2.了解语句行的构成,会应用;
3.理解指示性语句,会正确使用;
4.掌握基本的汇编语言程序设计
(1)循环程序设计(2)参数传送技术(3)子程序设计
第四章 8088的总线操作和时序
1.基本概念
(1)正确理解指令周期、总线周期和T状态的概念;
(2)掌握CPU的时序和存储器以及外设的时序概念;
2. 8088的总线
(1)掌握8088的两种组态的区别;
3.掌握8088典型时序
(1)存储器读周期(2)存储器写周期(3)中断响应周期
4.最大组态下的8088时序与最小组态的8088时序区别
5.计数器和定时器电路Intel 8253-PIT
(1)了解8253-PIT芯片的主要功能及内部结构;(2)会写8253-PIT的控制字;(3)掌握8253-PIT的工作方式;(4)掌握8253-PIT编程步骤;
第五章 半导体存储器
1.解半导体存储器的分类
2.读写存储器RAM
(1)了解基本存储电路(2)理解RAM的结构(3)掌握RAM与CPU的连接要考虑的主要问题;会根据连接图写出寻址范围
第六章 输入和输出
1.了解输入输出的寻址方式
2.掌握CPU与外设数据传送的方式
(1)无条件传送方式(2)查询传送方式(3)中断传送方式(4)直接数据通道传送(DMA)
第七章 中断
1.中断的引入
(1)理解为什么要用中断(2)掌握中断系统的功能
2.最简单的中断情况
(1)掌握CPU响应中断的条件(2)掌握CPU对中断的响应
4. 8088的中断方式
(1)掌握两条外部中断请求线及使用
(2)掌握内部中断类型号
(3)掌握8088中断优先权次序
(4)掌握8088中断向量表的大小、中断向量的个数及中断入口地址的求法
(5)掌握8088中的中断响应和处理过程
第八章 并行接口片子
1.了解可编程的输入输出接口芯片8255A-5的功能和结构
2.掌握8255A各端口的工作方式及功能

教材:《微型计算机系统原理及应用》 周明德, 清华大学出版社
参考书:
1、《微型计算机原理与接口技术》李兰友等编,南开大学出版社,2001年版�
2、《计算机电路基础》王金刚编,南开大学出版社,2001年版�

考题类型及分数分布:
本课程考试试题类型填空题、分析程序题、简答题、综合应用题四种形式,其中填空题20分、分析程序题15分、简答题20分,综合应用题20分
《数据结构》考试大纲
第一章 绪论
一、学习目的和要求
本章的目的是介绍数据结构中常用的基本概念和术语以及学习数据结构的意义。
本章要了解数据的抽象类型定义。理解算法在实际问题中的应用。重点掌握各种基本概念和术语、算法描述和分析的方法。
二、课程内容
第一节 什么是数据结构
第二节 基本概念和术语
第三节 抽象数据类型的表示与实现
第四节 算法和算法分析
三、考核知识点
1、 合适的数据结构在解决实际应用问题中的关键性;以及学习《数据结构》的意义。
2、 数据、数据元素、数据项、数据结构等基本概念。
3、 数据结构的四种逻辑结构和两种存储结构表示方法。
4、 抽象数据类型的表示和实现
5、 算法的五个特点。
6、 算法、算法的时间复杂度和空间复杂度、最坏的和平均的时间复杂度等概念。
7、 算法描述和算法分析的方法,对于一般算法能分析出时间复杂度。
四、考核要求
1. 识记
1) 数据结构的基本概念和术语。
2) 合适的数据结构在解决实际应用问题中的关键性,以及学习《数据结构》的意义。
3) 数据结构的四种逻辑结构和两种存储结构表示方法。
2. 领会
1) 算法的描述和分析:算法的时间复杂度和空间复杂度、最坏的和平均的时间复杂度
第二章 线性表
一、学习目的和要求
本章的目的是介绍线性表的逻辑结构和各种存储表示方法,以及定义在逻辑结构上的各种基本运算及其在存储结构上如何实现这些基本运算。要求在熟悉这些内容的基础上,能够针对具体应用问题的要求和性质,选择合适的存储结构设计出相应的有效算法,解决与线性表相关的实际问题。
本章重点是熟练掌握顺序表和单链表上实现的各种基本运算及相关的时间性能分析,难点是在循环链表和双向链表存储结构中各种基本运算的实现。
二、课程内容
第一节 线性表的类型定义
第二节 线性表的顺序表示和实现
第三节 线性表的链式表示和实现
三、考核知识点
1、 线性表的类型定义
2、 顺序表的含义及特点,顺序表上的插入、删除操作及其平均时间性能分析
3、 链式表示和实现,单链表、双链表、循环链表链接方式上的区别;
4、 单链表上实现的建表、查找、插入和删除等基本算法及其时间复杂度。
5、 循环链表上尾指针取代头指针的作用
6、 单循环链表上的算法与单链表上相应算法的异同点。
7、 双向链表的定义和相关算法。
8、 顺序表和链表的比较,以及如何选择其一作为其存储结构才能取得较优的时空性能。
四、考核要求
1. 识记
1) 线性表的逻辑结构特征;
2) 线性表上定义的基本运算,并利用基本运算构造出较复杂的运算。
2. 领会
1) 顺序表和链表的比较,各自的优缺点。
2) 针对线性表上所需要执行的主要操作,知道选择顺序表还是链表作为其存储结构才能取得较优的时空性能。
3. 综合应用
1) 顺序表的含义及特点,顺序表上的插入、删除操作及其平均时间性能分析。
2) 单链表、双链表、循环链表链接方式上的区别;
3) 单链表上实现的建表、查找、插入和删除等基本算法及其时间复杂度。
4) 循环链表上尾指针取代头指针的作用,
5) 单循环链表上的算法与单链表上相应算法的异同点。
6) 双链表的定义和相关算法。
第三章 栈和队列
一、学习目的和要求
本章的目的是介绍栈和队列的逻辑结构定义及在两种存储结构上如何实现栈和队列的基本运算。要求在掌握栈和队列的特点的基础上,懂得在什么样的情况下使用栈或队列。
本章重点是掌握栈和队列在两种存储结构上实现的基本运算,难点是循环队列中对边界条件的处理
二、课程内容
第一节 栈
第二节 栈的应用举例
第四节 队列
三、考核知识点
1、 栈的抽象数据类型的定义
2、 栈的表示和实现
3、 栈的简单应用
4、 抽象数据类型队列的定义
5、 队列的链式表示和实现
6、 队列的顺序表示和实现
四、考核要求
1. 领会
1) 栈和队列的特点,栈和队列各自的使用情况。
2. 综合应用
1) 栈的逻辑结构特点,栈与线性表的异同。
2) 顺序栈和链栈上实现进栈、退栈等基本算法。
3) 利用栈解决简单的实际问题。
4) 队列逻辑结构特点,队列与线性表的异同。
5) 顺序队列(主要是循环队列)和链队列上实现的入队、出队等基本算法。
6) 顺序队列的“假溢出”现象及其采用循环队列进行解决的方法。
第四章 串
一、学习目的和要求
本章的目的是介绍串的逻辑结构、存储结构及其串上的基本运算。本章重点是掌握串的基本概念和三种表示方法,这也是难点。
二、课程内容
第一节 串类型的定义
第二节 串的表示和实现
三、考核知识点
1、 串的定义、空串、空格串、子串、主串、串相等。
2、 串的基本操作。
3、 串的顺序存储结构及在顺序存储结构下基本操作的实现。
4、 串的堆分配存储表示及其在堆分配存储结构下基本操作的实现。
5、 串的链式存储表示
四、考核要求
1. 领会
1) 串的有关概念及其基本运算
2. 简单应用
1) 串的三种存储表示
2) 使用串解决与串相关的简单的应用问题
第五章 数组和广义表
一、学习目的和要求
本章的目的是介绍多维数组的逻辑结构特征及其存储方式,特殊矩阵和稀疏矩阵的压缩存储方法及广义表的概念,要求熟悉这些内容。
本章重点是熟悉多维数组的存储方式、矩阵的压缩存储方式、广义表的定义及其表头表尾的运算,难点是稀疏矩阵的压缩存储表示下转置运算。
二、课程内容
第一节 数组的定义
第二节 数组的顺序表示和实现
第三节 矩阵的压缩存储
第四节 广义表的定义
第五节 广义表的存储结构
三、考核知识点
1、 数组的顺序存储结构。
2、 二维数组的按行存储及按列存储和计算数组元素的地址计算公式。
3、 矩阵的压缩存储、特殊矩阵的表示。
4、 广义表的定义和操作(HEAD和TAIL)
5、 广义表的2种存储结构
四、考核要求
1. 领会
1) 多维数组的逻辑结构特征
2) 多维数组的顺序存储结构及其地址计算方式
3) 特殊矩阵和稀疏矩阵的概念
4) 稀疏矩阵的压缩存储方式——三元组表
5) 稀疏矩阵的两种转置运算算法
6) 广义表的概念、广义表和线性表的联系
7) 广义表表头和表尾的概念及广义表两个特殊的基本运算,取表头和取表尾。
8) 广义表的两种存储结构
第六章 树和二叉树
一、学习目的和要求
本章的目的是介绍二叉树的定义、性质、存储结构、遍历、线索化,树的定义、存储结构、遍历、树和森林的转换及赫夫曼树及其赫夫曼编码等内容。本章重点是掌握二叉树及其二叉树的遍历。难点是掌握与树有关的简单应用。
二、课程内容
第一节 树的定义和基本术语
第二节 二叉树
第三节 遍历二叉树和线索二叉树
第四节 树和森林
第六节 赫夫曼树及其应用
三、考核知识点
1、 树的定义和术语。
2、 二叉树(完全二叉树、满二叉树)的定义和性质(结论)、二叉树的存储结构——顺序表示法和链表表示法。
3、 二叉树的三种遍历方法及相应的递归算法。
4、 二叉树线索化的目的及其实质。
5、 树的存储表示法——孩子表示法、双亲表示法、孩子兄弟表示法。
6、 树和森林及二叉树的转换方法。
7、 树和森林的遍历
8、 树的路径长度、树的带权路径长度、赫夫曼树(最优二叉树)的构造方法。
9、 赫夫曼编码方法
四、考核要求
1. 领会
1) 树的逻辑结构特征
2) 树的不同表示方法
3) 树的常用术语及含义
4) 二叉树线索化的目的及实质
5) 在中序线索树中查找给定结点的中序前驱和中序后继的方法
6) 树和森林与二叉树之间的转换方法
7) 树的各种存储结构及其特点
8) 树的遍历方法
2. 简单应用
1) 二叉树的定义及树与二叉树的差别
2) 二叉树的性质,了解相应的证明方法
3) 二叉树的两种存储结构、特点及适用范围
4) 最优二叉树和前缀编码的概念及特点
5) 赫夫曼算法的思想
6) 根据给定的叶结点及其权值构造出相应的最优二叉树
7) 根据最优二叉树构造对应的赫夫曼编码
3. 综合应用
1) 二叉树的三种遍历算法,理解其执行过程
2) 根据不同的遍历方法,应能得出其相应的结点访问次序
3) 以遍历算法为基础,设计有关算法解决简单的应用问题
第七章 图
一、学习目的和要求
本章的目的是介绍图的基本概念、两种常用的存储结构、两种遍历方法以及图的应用算法。本章重点是掌握图的两种存储结构上实现的遍历算法。难点是图的应用算法:最小生成树,求最短路径以及拓扑排序。只要求掌握这些算法的基本思想及时间性能。
二、课程内容
第一节 图的定义和术语
第二节 图的存储结构
第三节 图的遍历
第四节 图的连通性问题
第五节 有向无环图及其应用
第六节 最短路径
三、考核知识点
1、 图的逻辑结构特征
2、 图的常用术语及含义
3、 图的邻接矩阵表示法存储结构
4、 邻接表表示法
5、 图的深度优先遍历
6、 图的广度优先遍历
7、 生成树和最小生成树
8、 构造最小生成树的PRIM算法思想和时间性能
9、 构造最小生成树的Kruskal算法思想和时间性能
10、 拓扑排序
11、 关键路径
12、 关于最短路径的算法——Dijkstra算法思想
四、考核要求
1. 领会
1) 图的逻辑结构及特征
2) 图的常用术语及含义
3) 生成树和最小生成树的概念
4) 对给定的图遍历,画出深度优先和广度优先生成树或森林
5) Prim和 Kruskal算法的基本思想、时间性能及这两种算法各自的特点
6) 要求对给定的连通图,根据Prim和Kruskal算法构造最小生成树
7) 最短路径的含义
8) 求单源点的最短路径问题的Dijkstra算法的基本思想和时间性能
9) 拓扑排序的基本思想和步骤
10) 拓扑排序不成功的原因
11) 对给定的有向图,若拓扑序列存在,则要求写出一个或多个拓扑序列
2. 简单应用
1) 图的邻接矩阵表示法和邻接表表示法
2) 根据应用问题的特点选择合适的存储结构
3) 连通图及非连通图的深度优先搜索和广度优先搜索两种遍历算法。
4) 确定两种遍历的顶点访问序列
5) 图的两种遍历和树的遍历之间的关系
6) 两种遍历算法分别使用的数据结构(栈和队列)
7) 利用图的遍历解决简单的应用问题
第九章 查找
一、学习目的和要求
本章的目的是介绍线性表、树和哈希表的查找方法、算法实现以及各种查找方法的时间性能(平均查找长度)分析。重点掌握顺序查找、折半查找、二叉排序树和哈希表查找的基本思想和算法实现。难点是二叉排序树上的删除算法。
二、课程内容
第一节 静态查找表
第二节 动态查找表
第三节 哈希表
二、 考核知识点
1、 查找的定义关键字、查找、平均查找长度
2、 静态查找表的查找算法(顺序查找、折半查找、分块查找(索引顺序表的查找)) 及其效率(最坏和平均长度)。
3、 二叉排序树的查找算法及其效率。
4、 平衡二叉树的定义。
5、 哈希法的特点
6、 哈希函数和散列地址。
7、 构造哈希函数的几种方法。直接寻址法、除留余数法、平方取中法、折叠法、数字分析法。
8、 处理冲突的方法:开放寻址法和链地址法。开放寻址法又分为线性探测再散列、二次探测再散列和伪随机探测再散列。
四、考核要求
1. 识记
1) 查找在数据处理中的重要性
2) 查找成功、不成功的含义
2. 简单应用
1) 顺序查找、折半查找、分块查找的基本思想、算法实现和查找效率分析
2) 顺序查找中“监视哨”的作用
3) 比较线性表上三种查找方法的优缺点,能根据实际问题的要求和特点,选择出 合适的查找方法
4) 二叉排序树和二叉平衡树的定义、特点
5) 二叉排序树的插入、删除、建树和查找算法及时间性能
6) 建立一棵二叉排序树的过程就是对输入序列的排序过程,输入序列对所建立的二叉排序树形态的影响
7) 哈希表、哈希函数、哈希地址(散列地址)、装填因子等有关概念
8) 哈希函数的构造方法和解决冲突的方法
9) 哈希表和其它表的本质区别
第十章 内部排序
一、学习目的和要求
本章的目的是介绍五类内部排序方法的基本思想、排序过程、算法实现、时间和空间性能的分析以及各种排序方法的比较和选择。重点掌握快速排序、堆排序、归并排序和基数排序的基本思想和排序过程。难点是这四类排序算法的实现。
二、课程内容
第一节 概述
第二节 插入排序
第三节 快速排序
第四节 选择排序
第五节 归并排序
第六节 基数排序
第七节 各种内部排序方法的比较讨论
三、 考核知识点
1、 排序的目的、分类和排序方法的稳定性的定义。
2、 插入排序:直接插入排序的算法、折半插入排序的算法、希尔排序的思想。
3、 选择排序的思想
4、 堆排序的方法、堆的定义、初始堆的建立。
5、 起泡排序的思想。
6、 快速排序的算法、快速排序的最坏情况时间复杂度的分析。
7、 归并排序的思想。
8、 基数排序的思想及特点。
四、考核要求
1. 识记
1) 排序在数据处理中的重要性
2) 排序方法稳定性的含义
3) 排序方法的分类及算法好坏的评判标准
2. 领会
1) 归并排序的基本思想和算法实现,以及时间性能分析
2) 针对给定的输入序列,能写出归并排序的排序过程
3) 基数排序的基本思想
4) 分配排序和其它几类排序方法的区别
3. 简单应用
1) 堆、极小堆、极大堆、堆顶等有关概念和定义
2) 堆的性质及堆与完全二叉树的关系
3) 直接选择排序和堆排序的基本思想和算法实现,以及时间性能分析
4) 针对给定的输入序列,写出堆排序的排序过程
5) 比较各种排序算法的优缺点
6) 根据实际问题的特点和要求选择合适的排序方法
4. 综合应用
1) 直接插入排序的基本思想和算法实现,以及在最好、最坏和平均情况下的时间性能分析
2) 直接插入排序中“监视哨”的作用
3) 针对给定的输入序列,要能写出直接插入排序的排序过程
4) 起泡排序的基本思想
5) 快速排序的基本思想和算法实现,以及在最好、最坏和平均情况下的时间性能分析,了解算法的稳定性
6) 枢轴元素的选择对排序的影响
7) 针对给定的输入序列,能写出快速排序的排序过程
第十二章 文 件
一、学习目的和要求
本章的目的是介绍存储在外存上的数据结构(文件)的有关概念、各种文件及其特点、组织方式及其查询和更新操作,要求对这些内容做一般性的了解,本章不是重点。。
二、课程内容
第一节 有关文件的基本概念
第二节 顺序文件
第三节 索引文件
第四节 ISAM文件和VSAM文件
第五节 直接存取文件
第六节 多关键字文件
三、考核知识点
9、 文件的基本概念
10、 常用的文件组织方式:顺序文件、索引文件、散列文件和多关键字文件
11、 顺序文件的特点及查找方法
12、 索引文件的组织方式
13、 索引顺序文件常用的有两种:ISAM文件和VSAM文件
14、 散列文件(直接存取文件)的特点及优点
15、 两种多关键字文件的组织方法:多重表文件和倒排表
四、考核要求
1. 识记
1) 文件的基本概念
2) 常用的文件组织方式:顺序文件、索引文件、散列文件和多关键字文件
3) 顺序文件的特点及查找方法
4) 索引文件的组织方式
5) 索引顺序文件常用的有两种:ISAM文件和VSAM文件
6) 散列文件(直接存取文件)的特点及优点
7) 两种多关键字文件的组织方法:多重表文件和倒排表

教材:《数据结构》(C语言版)严蔚敏 吴伟民 编着,清华大学出版社1996年版。

考题类型及分数分布:
本课程考试试题类型填空题、问答题、综合应用题三种形式,其中填空题20分、问答题25分,综合应用题30分。
这是2010考试的考纲,我想2011年考纲不会有太大的变化

❸ 数据结构--串

串的定义:串(string)是由零个或多个字符组成的有限序列,又名叫字符串。零个字符的串称为空串(null string)。

还有一些特别的字符串:
空格串:只包含空格的串。
子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。

串有两种存储结构,静态和动态,静态的存储结构一般使用一组地址连续的存储单元来存储,例如数组。使用数组,就需要在初始分配一个固定长度的存储区域,这样就有可能使:两串的连接、新串的插入、以及字符串的替换的操作,超过数组的长度。为了解决这个问题,可以动态分配串的存储空间,使用链表结构(一般情况下,对串的操作基本上是从头到尾顺序扫描,因此无需使用双向链表)。

常用的串有7种基本操作:
1.赋值,2.判等(串的比较是通过比较字符的ASCII来进行的),3.求长,4.链接,5.求字串,6.定位,7.置换

下面来说说在静态存储方式下,链接,求子串,求子串位置的操作

举个例子:
主串S:a b a b c a b c a c b a b,子串T:a b c m c
当i=3,S[i]=b,当j=3,T[j]=m,发现子串与主串不相等了,这时不用从i=1,j=0从头开始比较,根据此轮比较发现主串与子串0-2的字符是相等的,而且0-2的字符也不是重复的,所以T[0]也就无需在和S[1],S[2]进行比较了,i可以直接向右滑动到3,继续同T进行比较,在整个匹配过程中,i的指针没有回溯,减少了运行时间。

❹ C语言实现把一些字符串存储到数组或其他数据结构中并输出

sometype flag;
char str[100];
while(flag != 程序运行结束标志)
{
if(程序运行结果 == "apple")
//if里可能是字符串比较,也可能是相应的数字的比较,看具体情况改吧
{
strcat(str, "apple");
}
else if(程序运行结果 == "banana")
{
strcat(str, "banana");
}
......
}

C里面好像没有string类型,我也不知道怎么表示字符串的数组,既然最终是用字符串输出,就直接用一个字符串连接呗