概述
线性表、链表
第1关:实现一个顺序存储的线性表
本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt、SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入、删除与查找等功能。
需要补充的函数有:bool SL_InsAt(SeqList* slist, int i, T x)、T SL_DelAt(SeqList* slist, int i)、int SL_DelValue(SeqList* slist, T x)。
三个函数中补充的代码如下所示:
bool SL_InsAt(SeqList* slist, int i, T x)
// 在顺序表的位置i插入结点x, 插入d[i]之前。
// i 的有效范围[0,plist->len]。
{
// 请在下面的Begin-End之间补充代码,插入结点。
/********** Begin *********/
if (i<0 || i>slist->len || slist->len==slist->max) {
printf("SL_InsAt(): location error, or slist full.n");
return false;
}
for (int j=slist->len; j>=i+1; j--) {
slist->data[j]=slist->data[j-1];
}
slist->data[i]=x;
slist->len++;
return true;
/********** End **********/
}
T SL_DelAt(SeqList* slist, int i)
// 删除顺序表plist的第i号结点。
// i的有效范围应在[0,plist->len)内,否则会产生异常或错误。
// 返回被删除的数据元素的值。
{
// 在下面的Begin-End之间补充代码,删除第i号结点。
/********** Begin *********/
if (i<0 || i>=slist->len) {
printf("SL_DelAt(): location error!n");
SL_Free(slist);
exit(0);
}
T res=slist->data[i];
for (int j=i; j<slist->len-1; j++) {
slist->data[j] = slist->data[j+1];
}
slist->len--;
return res;
/********** End **********/
}
int SL_DelValue(SeqList* slist, T x)
// 删除第一个值为x的结点。
// 存在值为x的结点则返回结点编号, 未找到返回-1。
{
// 在下面的Begin-End之间补充代码,删除第一个值为 x 的结点。
/********** Begin *********/
int i=SL_FindValue(slist, x);
if (i>=0) SL_DelAt(slist, i);
return i;
/********** End **********/
}
第2关:实现一个链接存储的线性表
任务描述:
本关任务:完成一个链接存储的线性表的小程序。
需要补充的函数:bool LL_InsAfter(LinkList* llist, T x)
bool LL_InsAfter(LinkList* llist, T x)
// 在线性表的当前位置之后插入数据元素x。空表允许插入。当前位置指针将指向新结点。
// 若插入失败,返回false,否则返回true。
{
// 请在Begin-End之间补充代码,实现结点插入。
/********** Begin *********/
LinkNode *newNode=(LinkNode*)malloc(sizeof(LinkNode));
if (newNode==NULL) return false;
newNode->data=x;
if (llist->len==0) {
/* 在空表中插入*/
newNode->next=NULL;
llist->front = llist->rear = newNode;
}
else if (llist->curr == llist->rear || llist->curr == NULL) {
/* 在尾结点后插入*/
newNode->next = NULL;
llist->rear->next=newNode;
llist->pre=llist->rear;
llist->rear=newNode;
llist->position=llist->len;
}
else{
/* 在中间位置插入*/
newNode->next = llist->curr->next;
llist->curr->next=newNode;
llist->pre=llist->curr;
llist->position ++;
}
/* 增加链表的大小*/
llist->len ++;
/* 新插入的结点为当前结点*/
llist->curr = newNode;
return true;
/********** End **********/
}
最后
以上就是犹豫铃铛为你收集整理的头歌数据结构练习题的全部内容,希望文章能够帮你解决头歌数据结构练习题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复