数据结构---C语言描述-(耿国华)-课后习题答案.doc
文本预览下载声明
第一章 习题答案
2、××√
3、(1)包含改变量定义的最小范围
(2)数据抽象、信息隐蔽
(3)数据对象、对象间的关系、一组处理数据的操作
(4)指针类型
(5)集合结构、线性结构、树形结构、图状结构
(6)顺序存储、非顺序存储
(7)一对一、一对多、多对多
(8)一系列的操作
(9)有限性、输入、可行性4、(1)A(2)C(3)C
5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
第二章 习题答案
1、(1)一半,插入、删除的位置
(2)顺序和链式,显示,隐式
(3)一定,不一定
(4)头指针,头结点的指针域,其前驱的指针域
2、(1)A(2)A:E、A
B:H、L、I、E、A
C:F、M
D:L、J、A、G或J、A、G
(3)D(4)D(5)C(6)A、C
3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。
头结点:为了操作方便,可以在单链表的第一个结点之前附设一个结点,该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。
首元素结点:线性表中的第一个结点成为首元素结点。
4、算法如下:
int Linser(SeqList *L,int X)
{ int i=0,k;
if(L-last=MAXSIZE-1)
{ printf(“表已满无法插入”);
return(0);
}
while(i=L-lastL-elem[i]X)
i++;
for(k=L-last;k=I;k--)
L-elem[k+1]=L-elem[k];
L-elem[i]=X;
L-last++;
return(1);
}
5、算法如下:
#define OK 1
#define ERROR 0
Int LDel(Seqlist *L,int i,int k)
{ int j;
if(i1||(i+k)(L-last+2))
{ printf(“输入的i,k值不合法”);
return ERROR;
}
if((i+k)==(L-last+2))
{ L-last=i-2;
ruturn OK;
}
else
{for(j=i+k-1;j=L-last;j++)
elem[j-k]=elem[j];
L-last=L-last-k;
return OK;
}
}
6、算法如下:
#define OK 1
#define ERROR 0
Int Delet(LInkList L,int mink,int maxk)
{ Node *p,*q;
p=L;
while(p-next!=NULL)
p=p-next;
if(minkmaxk||(L-next-data=mink)||(p-data=maxk))
{ printf(“参数不合法”);
return ERROR;
}
else
{ p=L;
while(p-next-data=mink)
p=p-next;
while(q-datamaxk)
{ p-next=q-next;
free(q);
q=p-next;
}
return OK;
}
}
9、算法如下:
int Dele(Node *S)
{ Node *p;
P=s-next;
If(p= =s)
{printf(“只有一个结点,不删除”);
return 0;
}
else
{if((p-next= =s)
{s-next=s;
free(p);
return 1;
}
Else
{ while(p-next-next!=s)
P=p-next;
P-next=s;
Free(p);
return 1;
}
}
}
第三章 习题答案
2、(1)
3、栈有顺序栈和链栈两种存储结构。
在顺序栈中,栈顶指针top=-1时,栈为空;栈顶指针top=Stacksize-1时
显示全部