您当前的位置: 百科371电脑/网络C/C++ → 电脑/网络内容 退出登录 用户管理 用户注册
本类热门文章
相关文章
中原建材网
已知性线表中的元素以值递增有序排列,并以单链表作存储结构。写一高效的算法,删除表中所有%D

减小字体 增大字体

问题:已知性线表中的元素以值递增有序排列,并以单链表作存储结构。写一高效的算法,删除表中所有%D  

#include<stdio.h>

typedef struct list{
int key;
struct list *next;
}LIST;

typedef struct{
LIST *next;
int size;
}HEAD;

LIST *insert_to_inorder(LIST *old_listp,int key)
{
LIST *new_listp;

if(old_listp == NULL)
{
new_listp = (LIST *)malloc(sizeof(LIST));
new_listp->key = key;
new_listp->next = NULL;
}
else if(old_listp->key >= key)
{
new_listp = (LIST *)malloc(sizeof(LIST));
new_listp->key = key;
new_listp->next = old_listp;
}
else
{
new_listp = old_listp;
new_listp->next = insert_to_inorder(old_listp->next,key);
}
return new_listp;
}

void insert_to(HEAD *headp,int key)
{
++(headp->size);
headp->next = insert_to_inorder(headp->next,key);
}

LIST *delete_to_inorder(LIST *old_listp,int target,int *is_deletedp)
{
LIST *tempp,*new_listp;
if(old_listp == NULL)
{
*is_deletedp = 0;
new_listp = NULL;
}
else if(old_listp->key == target)
{
*is_deletedp = 1;
tempp = old_listp;
new_listp = old_listp->next;
free(tempp);
}
else if(old_listp->key > target)
{
*is_deletedp = 0;
new_listp = old_listp;
}
else
{
new_listp = old_listp;
new_listp->next = delete_to_inorder(new_listp->next,target,is_deletedp);
}

return new_listp;
}



int delete_to(HEAD *headp,int target)
{
int is_deleted;

headp->next = delete_to_inorder(headp->next,target,&is_deleted);

if(is_deleted)
--(headp->size);

return is_deleted;
}


void print_to(HEAD *head)
{
LIST *temp;
for(temp = head->next;temp != NULL;temp = temp->next)
printf("%d\n",temp->key);
}


int main(void)
{
HEAD head = {NULL,0};

insert_to(&head,4);
insert_to(&head,3);
insert_to(&head,2);
insert_to(&head,1);

delete_to(&head,3);

print_to(&head);

getchar();

return 0;
}

如果你对已知性线表中的元素以值递增有序排列,并以单链表作存储结构。写一高效的算法,删除表中所有%D这个问题有好的意见或 建议,请留言
[] [返回上一页] [打 印]
电脑/网络评论 (评论内容只代表网友观点,与本站立场无关!)

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

中原建材网 简单版 站长QQ:382546553