数据结构基础知识Word文档下载推荐.docx
《数据结构基础知识Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构基础知识Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
inti,j,x;
for(i=0;
i<
n:
i++)n+1
for(j=0;
j<
n;
j++)n+1
x+=i;
------------------------------------------------------------------------------------------------------------------
第二章线性表
1.顺序表结构由n(n>
=0)个具有相同性质的数据元素a1,a2,a3……,an组成的有穷序列
//顺序表结构
#defineMAXSIZE100
typedefintDataType;
Typedefstruct{
DataTypeitems[MAXSIZE];
Intlength;
}Sqlist,*LinkList;
2.单链表
(1)链表结点结构
//链表的节点结构
TypedefstructNode{
intdata;
structNode*next;
}Lnode,*Pnode,*LinkList;
(2)结点遍历
voidTraverseList(LinkListt){
LinkListp;
while(t){
p=t;
t=t->
next
free(p);
}
}
(3)链表操作算法:
初始化、插入、输出、删除
voidInitList(LinkList*h){
*h=(LinkList)malloc(sizeof(LNode));
if(!
h){
print(“初始化错误”);
return;
(*h)->
next=NULL;
voidInsertList(LinkListh,intpos,datatypex){
LinkListp=h,q;
inti=0;
while(p&
&
pos-1){
p=p->
next;
i++;
p||i>
pos-1)print(“插入位置出错!
!
”);
InitList(&
q);
q->
data=x;
voidDeleteList(LinkListh,intpos){
pos-1){cout<
<
”删除位置错误”;
return;
q=p->
p->
next=q->
free(q);
-----------------------------------------------------------------------------------------------------------------
1、线性表中,第一个元素没有直接前驱,最后一个元素没有直接后驱。
2、在一个单链表中,若p所指结点是q所指结点的前驱结点,则删除结点q的操作语句为
。
3、在长度为N的顺序表中,插入一个新元素平均需要移动表中n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。
4、若线性表的主要操作是在最后一个元素之后插入一个元素或删除最后一个元素,则采用___带头结点的双循环链表__存储结构最节省运算时间。
5、已知顺序表中每个元素占用3个存储单元,第13个元素的存储地址未336,则顺序表的首地址为___300_____。
6、设有一带头结点单链表L,请编写该单链表的初始化,插入、输出和删除函数。
(函数名自定义)
----------------------------------------------------------------------------------------------------------------
voidInitList(LinkList*L){
(*L)=(LinkList)malloc(sizeof(LNode));
L){
cout<
”初始化失败!
”;
(*L)->
voidInsertList(LinkListL,intpos,DataTypex){
LinkListp=L,q;
cout<
”插入位置错误”;
next=p->
next=q;
voidTraverseList(LinkListL){
LinkListt;
while(L){
t=L;
L=L->
free(t);
LinkListt=L;
t->
data<
””;
endl;
voidDeleteList(LinkListL,intpos){
”删除位置错误!
free(q):
第三章栈和队列
1.栈
(1)栈的结构与定义
(2)顺序栈操作算法:
入栈、出栈、判断栈空等
(3)链栈的结构与定义
2.队列
(1)队列的定义
1、一个栈的入栈序列为“ABCDE”,则以下不可能的出栈序列是()
A.BCDAEB.EDACBC.BCADED.AEDCB
2、栈的顺序表示仲,用TOP表示栈顶元素,那么栈空的条件是()
A.TOP==STACKSIZEB.TOP==1C.TOP==0D.TOP==-1
3、允许在一端插入,在另一端删除的线性表称为____队列____。
插入的一端为____队尾____,删除的一端为_____队头___。
4、栈的特点是____先进后出____,队列的特点是____先进先出____。
5、对于栈和队列,无论他们采用顺序存储结构还是链式存储结构,进行插入和删除操作的时间复杂度都是____O
(1)____。
6、已知链栈Q,编写函数判断栈空,如果栈空则进行入栈操作,否则出栈并输出。
(要求判断栈空、出栈、入栈用函数实现)
voidEmptyStack(LinkStackQ){
LinkStackt;
charx=a;
//假设链栈存储字符型数据
if(Q->
next){t=Pop(Q,x);
data;
elsePush(Q,x);
基本概念
⏹数据结构的研究对象是什么?
数据,数据元素(数据结构中讨论的"
基本单位"
、数据整体中相对独立的单位、
数据元素的特点:
相对性),数据结构,数据类型和抽象数据类型,数据对象
⏹数据结构是什么?
定义:
数据元素以及它们之间存在一种或多种特定的关系。
特点:
数据元素集合相同,而其上的关系不同,则构成的数据结构不同。
⏹逻辑结构是什么?
主要有哪几类?
逻辑结构:
对数据元素之间存在的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合上的若干关系表示。
⏹存储结构是什么?
存储结构:
是数据逻辑结构在计算机中的表示和实现,故又称数据"
物理结构"
⏹什么是算法?
是对问题求解过程的一种描述,是为解决一个或一类问题给出的一个确定的、有限长的操作序列。
五大特性:
有穷性、确定性、可行性、输入、输出
线性表
⏹线性表的定义?
线性表是由n(n≥0)个属性相同数据元素a1,a2…an组成的一个有限序列,线性表或是空表,或可以表示为A=(a1,a2,…,ai,…,an)其中ai(i=1,2,…,n)是线性表中的一个元素。
⏹如何在顺序存储结构表示的线性表中实现插入元素操作?
intinsertElement(List_Array*list_ptr,char*element)
{//把新字符串插入到线性表的最后位置
if(list_ptr->
count==LISTMAX)
return(-1);
//到达最大大小
else{
strcpy(list_ptr->
list[list_ptr->
count],element);
list_ptr->
count++;
//下一个元素
return
(1);
//成功返回
}
⏹如何在顺序存储结构表示的线性表中实现元素删除操作?
⏹intdeleteElement(List_Array*list_ptr,intpos)
⏹{intk;
⏹//检查下标pos位置上是否存在数据
if(pos<
0||pos>
list_ptr->
count-1)
//出错
else{//将pos位置后所有元素向前移动
for(k=pos;
k<
count-1;
k++)
strcpy(list_ptr->
list[k],list_ptr->
list[k+1]);
count--;
//删除成功
}
⏹如何在顺序存储