数据结构 设计一个算法判定一个带头结点的单链表的元素值是否递增的

2024-12-22 14:44:42
推荐回答(2个)
回答1:

既然是数据结构,就写伪代码可以了。
基本思路:从首元(头结点指向的节点)开始,依次查看是此节点的数据否有下一个节点的数据大,如果存在一个节点的数据比下一个节点大,说明不是递增。反之如果考察到最后一个节点之前都比下一个节点小,那么就是递增
如果节点定义如下:
typedef struct LNode{//定义节点类型
ElemType data; //数据域
Struct LNode *next;//指针域
}LNode,*Linklist

算法这样写:
status Judge (Linkedlist l)//表头为l
{int *p,p=l->next;//定义指针变量p,使得p指向首元
if (p-next==NULL||p==NULL) return INFEASIBLE;//如果链表为空,或者仅有一个数据节点,则参数不合法
else {
while (p->next!=NULL&&p->datanext-data) p=p->next;//如果p所指的节点的数据小于(如果是非递减就加上等于)p-next所指节点的数据并且p所指的节点不是尾节点,则考察下一个节点,否则终止循环。
if (p-next!=NULL) return NO//如果p节点不是尾节点,说明p节点的数据大于p->next节点数据,即原表中的元素值不是递增
else return YES;//反之,p节点是尾节点则说明所有的节点的数据都比后继节点小,即原表中的元素值递增。
}
}

没有注释的:
status Judge (Linkedlist l)
{int *p,p=l->next;
if (p-next==NULL||p==NULL) return INFEASIBLE;
else {
while (p->next!=NULL&&p->datanext-data) p=p->next;
if (p-next!=NULL) return NO
else return YES;
}
}

就这么短。。。不知道上面那哥们怎么做的

回答2:

#include
#include
struct node{
int key;
struct node *next;
};
void creat_link(struct node *);
main()
{
struct node *head=NULL;
creat_link(head);
}
void creat_link(struct node *head_node)
{
struct node *p,*q,*Temp;
int number;
printf("Please input data:[-1 is End]\n");
scanf("%d",&number);
while(number!=-1){
q=(struct node *)malloc(sizeof(struct node));
q->key=number;
if(head_node==NULL ){
head_node=q;
p=q;
}
else{
p->next=q;
p=q;
}
scanf("%d",&number);
}
p->next=NULL;
Temp=head_node;
while(Temp!=NULL){
printf("%d\n",Temp->key);
Temp=Temp->next;
}
}

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela