Question:有一个带头结点的单链表L,设计一个算法使其元素递增有序


#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct  LNode * next;
}LNode ,*LinkList;
/*编写算法将使其元素递增*/
LinkList increasing(LinkList &L){
	LNode *pre,*p=L->next,*r=p->next; //r保持*p后继结点指针,以保证不断链 
	p->next=NULL;//构造只含一个数据结点的有序表 
	p=r;
	while(p!=NULL){
		r=p->next;//保存*p的后继结点指针 
		pre=L;
		while(pre->next!=NULL&&pre->next->data<p->data){
			pre=pre->next;//在有序表中查找插入*p的前驱结点 
		}
		p->next=pre->next;//将*p插入到*pre之后 
		pre->next=p;
		p=r;//扫描原单链表中剩下的结点 
	}
	return L; 
}
LinkList createLinkListStern(LinkList &L){
	ElemType x,n;
	L=(LinkList)malloc(sizeof(LNode));
	if(L==NULL){
		printf("内存分配失败");
	 
	}
	L->next=NULL;
	printf("输入单链表的长度:");
	scanf("%d",&n);
	LNode *s,*r=L;//r指向尾指针  
	for(int i=0;i<n;i++){
		printf("输入第%d个元素:",(i+1));
		scanf("%d",&x);
		s=(LinkList)malloc(sizeof(LNode));
		s->data=x;
		r->next=s;
		r= s;
	}
	r->next=NULL; 
	return L;	
} 
/*
	遍历展示单链表的值 
*/
void display(LinkList &L){
	LinkList p;
	printf("输出单链表元素:\n");
	for(p=L->next;p!=NULL;p=p->next){
		int i=1;
		printf("第%d个元素为%d\n",i++,p->data); 
	}
} 
int main(){
	LNode *L;
	createLinkListStern(L);
	display(L);
	increasing(L);
	display(L); 
	return 0;
}

实现图解:

2020考研数据结构 实现单链表的元素递增2020考研数据结构 实现单链表的元素递增

2020考研数据结构 实现单链表的元素递增2020考研数据结构 实现单链表的元素递增

2020考研数据结构 实现单链表的元素递增


截图:

2020考研数据结构 实现单链表的元素递增

相关文章:

  • 2021-06-13
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
  • 2021-06-13
  • 2021-05-07
  • 2022-12-23
  • 2021-11-04
猜你喜欢
  • 2021-12-19
  • 2021-07-18
  • 2022-12-23
  • 2021-12-19
  • 2022-12-23
  • 2021-09-08
  • 2021-07-22
相关资源
相似解决方案