数据结构算法编程题,删除带头结点的单链表中最大元素或最小元素
2个回答
展开全部
//删除单链表中最大元素
Del-max(link a){
int tmp;
element *p;
element *max;
p=a; //指针,用于遍历链表,取数与当前最大结点值比较
max=a; //指针,用于记录最大元素所在位置(未考虑有多个最大元素)
tmp=p->data; //变量,用于记录当前最大结点值
while(a->next!=null){
p=p->next;
if(p->data>tmp){ 、//如果当前指针所指结点值大于当前tmp所保留的值,则记录
max=p; //当前位置(放入到max),记录当前最大值(放入tmp)
tmp=p->data;
} //end of if
} //end of while
tmp=max->next->data; //一次遍历后max指针所指结点就是最大元素,删除之。。。
max->data=tmp;
max->next=max->next->next; //删除方法能看懂么?好好思考。。。
}//end of Del-max
Del-max(link a){
int tmp;
element *p;
element *max;
p=a; //指针,用于遍历链表,取数与当前最大结点值比较
max=a; //指针,用于记录最大元素所在位置(未考虑有多个最大元素)
tmp=p->data; //变量,用于记录当前最大结点值
while(a->next!=null){
p=p->next;
if(p->data>tmp){ 、//如果当前指针所指结点值大于当前tmp所保留的值,则记录
max=p; //当前位置(放入到max),记录当前最大值(放入tmp)
tmp=p->data;
} //end of if
} //end of while
tmp=max->next->data; //一次遍历后max指针所指结点就是最大元素,删除之。。。
max->data=tmp;
max->next=max->next->next; //删除方法能看懂么?好好思考。。。
}//end of Del-max
追问
max->next=max->next->next;你的这句有问题吧,应该是max的前驱=max的next.
追答
没问题的:删除指针当前所指结点你会用什么办法?我的办法是取当前指针所指的下一个结点值然后赋给当前结点,再把下个结点删掉。比如A->B->C->D四个结点,当前指针指在B,你想删除B结点,那么我就把C的值赋给B结点,单链表变为A->C->C->D,现在当前指针指在第一个C上,现在我删除掉当前指针的下个结点也就是第二个C,单链表就变为A->C->D,成功删除B
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
正确的程序如下:VC++6.0下运行正常。
#include <stdio.h>
#include <malloc.h>
//结构体,用整数作数据
typedef struct tNODE
{
int data;
struct tNODE *next;
}NODE;
//删除链表,回收空间
void clear(NODE *head)
{
NODE *p;
while(head)
{
p=head->next;//保存下一个结点的地址
free(head);//删除最先的一个结点
head=p;//指向下一个结点
}
}
//输出整个链表中的数据
void write(NODE *head)
{
NODE *p=NULL;
p=head->next;//因为使用带头结点的链表,所以要跳过第一个结点
while(p)
{
// printf("%d",p->data);
printf("%d",p->data);
p=p->next;//后移
}
printf("\n");
}
//生成链表,以-1表示结束
NODE *create()
{
NODE *h, *t;
int x;
h=(struct tNODE *)malloc(sizeof(NODE));//建立头结点
t=h;
printf("生成链表,以-1表示结束:\n");
scanf("%d", &x);
while(x!=-1)
{
t->next=(struct tNODE *)malloc(sizeof(NODE));
t=t->next;
t->data=x;
scanf("%d", &x);
}
t->next=NULL;
// free(t);
return h;
}
NODE *Del_min_max(NODE *h)
{
NODE *p;
int max=0,min;
p=h->next;
/* if (p->data > p->next->data)
{
max=p->data;
min=p->next->data;
}
else
{
max=p->data;
min=p->next->data;
}
p=p->next->next;*/
min=p->data;
max=p->data;
while(p)
{
if (p->data>max) max=p->data;
else if (p->data<min) min=p->data;
p=p->next;
}
p=h->next;
NODE *pre=h;
while(p)
{
if ((p->data==min)||(p->data==max))
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}
return h;
}
void main()
{
NODE *head;
NODE *p;
head=create();
p=head->next;
write(head);
Del_min_max(head);
write(head);
clear(head);
}
希望对你有帮助
#include <stdio.h>
#include <malloc.h>
//结构体,用整数作数据
typedef struct tNODE
{
int data;
struct tNODE *next;
}NODE;
//删除链表,回收空间
void clear(NODE *head)
{
NODE *p;
while(head)
{
p=head->next;//保存下一个结点的地址
free(head);//删除最先的一个结点
head=p;//指向下一个结点
}
}
//输出整个链表中的数据
void write(NODE *head)
{
NODE *p=NULL;
p=head->next;//因为使用带头结点的链表,所以要跳过第一个结点
while(p)
{
// printf("%d",p->data);
printf("%d",p->data);
p=p->next;//后移
}
printf("\n");
}
//生成链表,以-1表示结束
NODE *create()
{
NODE *h, *t;
int x;
h=(struct tNODE *)malloc(sizeof(NODE));//建立头结点
t=h;
printf("生成链表,以-1表示结束:\n");
scanf("%d", &x);
while(x!=-1)
{
t->next=(struct tNODE *)malloc(sizeof(NODE));
t=t->next;
t->data=x;
scanf("%d", &x);
}
t->next=NULL;
// free(t);
return h;
}
NODE *Del_min_max(NODE *h)
{
NODE *p;
int max=0,min;
p=h->next;
/* if (p->data > p->next->data)
{
max=p->data;
min=p->next->data;
}
else
{
max=p->data;
min=p->next->data;
}
p=p->next->next;*/
min=p->data;
max=p->data;
while(p)
{
if (p->data>max) max=p->data;
else if (p->data<min) min=p->data;
p=p->next;
}
p=h->next;
NODE *pre=h;
while(p)
{
if ((p->data==min)||(p->data==max))
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}
return h;
}
void main()
{
NODE *head;
NODE *p;
head=create();
p=head->next;
write(head);
Del_min_max(head);
write(head);
clear(head);
}
希望对你有帮助
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询