关于数据结构(C语言版)的问题

1、已知一个顺序表L,其中的元素递增有序排列,设计一个算法插入一个元素x后保持该顺序表仍递增有序排列。2、设计一个算法删除单链表L中值为x的结点的直接前驱结点。只有十分了... 1、已知一个顺序表L,其中的元素递增有序排列,设计一个算法插入一个元素x后保持该顺序表仍递增有序排列。
2、设计一个算法删除单链表L中值为x的结点的直接前驱结点。

只有十分了。。谢谢了
展开
 我来答
ssf8763
2011-10-07 · 超过12用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:37.5万
展开全部
第一题:下面的L.listsize是顺序表在建立的时候分配的总体存储量,INCREMENT是新增加的量,都是实现已经定义好的,EType是元素的类型,到具体的程序中的时候,可以使用typedef定义类型,这里是代指某个类型;具体算法如下:
void inser_order(List &L,EType Elem)
{if(L.length>=L.listsize) //当新增加元素时,表的总体长度大于已经分配的总体大小时,要重新分配表的长度;
{list *newbase;
newbase=(EType *)realloc(L.elem,(L.listsize+INCREMENT)*sizeof(EType));//新分配的表长
if(!newbase) exit(OVERFLOW);//分配不成功;
L.elem=newbase;L.size+=INCREMENT;
}
List *p,*q;
int i=L.length-1;
q=&(L.elem[i]);
while(i>=0)//从表的最后的元素开始比较,寻找合适的插入位置;
{
if(Elem<=L.elem[i]&&Elem>L.elem[i-1]) //插入的数值位于当前值与前面值的中间值时
{
p=&(L.elem[i]);//指向要插入的位置
break;
}
{
if(i==L.length-1) //当插入的值是比最大元素还要大时
{
p=q;//指向最后的位置
break;
}
}
i--;
}
while(q>=p)//从后往前移动各个位置的数,然后找到要插入的位置,插入
{
*(q+1)=*q;
q=q-1;
if(q==p)//找到要插入的位置
{
*(q+1)=*q;
*q=e;//插入元素
++L.length;//表长加1
}
}
}
第二题:
void deletenode(Listnode &L,EType X)
{Listnode *p,*q,*r;//p用来寻找X结点,q用来指向X结点的前驱结点的前驱结点,r指向p所指向结点的前驱结点;
p=L;//初始时,指向头结点;
q=L;
if(p->elem==X)//第一个结点就是所找的X;
{
printf("The first node is X,can't delete its precessor");
exit(1);
}
while(p->next!=NULL)//遍历链表,寻找X的位置
{
if(p->elem==X)//找到X
{
while(q->next!=r)
q=q->next;//寻找X的前驱结点
//删除结点的操作
q->next=p;
r->next=NULL;
free(r);
}
r=p; //r永远指向p所指向结点的前驱结点
p=p->next;//p往后移动
}
}
鷹弈
2011-10-06 · TA获得超过5194个赞
知道大有可为答主
回答量:1257
采纳率:0%
帮助的人:609万
展开全部
顺序表和链表都带头结点

(1)
void SeqListInsert(SeqList *L, int num)
{
int i, j = 1;

if (MAXSIZE-1 == L->length)
{
printf("表已满,无法进行插入\n");
return;
}

while (j <= L->length)
{
if (num < data[j])
{
break;
}
else
{
j++;
}
}

L->length++;

for (i=L->length; i>j; i--)
{
data[i] = data[i-1];
}

data[j] = num;
}

(2)
void LinkDelete(LinkNode *head, int num)
{
LinkNode *p = head->next;
LinkNode *q = head;

if (num == p->data)
{
printf("此为第一个结点,无前驱\n");
return;
}

while (NULL != p)
{
if (num == p->next->data)
{
q->next = p->next;
free(p);
return;
}
else
{
p = p->next;
q = q->next;
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天雨天空
2011-10-06 · TA获得超过148个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:84万
展开全部
表指针问题的确是个难点,我当时学时也很头疼。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
绿光问问
2011-10-06 · TA获得超过723个赞
知道小有建树答主
回答量:232
采纳率:0%
帮助的人:164万
展开全部
路过……(*^__^*)
追问
诶诶 你刚才有帮我回答么
追答
本人不答题的……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaybestwang
2011-10-06 · TA获得超过4106个赞
知道小有建树答主
回答量:940
采纳率:0%
帮助的人:699万
展开全部
要写代码?
追问
恩。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式