C语言 数据结构单链表 实例

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 50

typedef struct Lnode{
	int data;
	struct Lnode *next;
}Lnode,*LinkList;

void InitList(LinkList &L){
	L=(Lnode *)malloc(50*sizeof(Lnode));
	L->next=NULL;
}
void HeadInsert(LinkList &L){
	Lnode *s;
	L=(Lnode *)malloc(sizeof(Lnode));
	L->next=NULL;
	int i;
	scanf("%d",&i);
	while(i!=999){
		s=(Lnode *)malloc(sizeof(Lnode));
		s->data=i;
		s->next=L->next;
		L->next=s;
		scanf("%d",&i);
	}
}

void LastInsert(LinkList &L){
	L=(Lnode *)malloc(sizeof(Lnode));
	L->next=NULL;
	Lnode *s;
	Lnode *p=L;
	int i;
	scanf("%d",&i);
	while(i!=999){
		s=(Lnode *)malloc(sizeof(Lnode));
		p->next=s;
		s->next=NULL;
		s->data=i;
		p=p->next;
		scanf("%d",&i);
	}
}
//void apart(LinkList &L,LinkList &L1,LinkList &L2){
//	L1=L;
//	L2=(Lnode *)malloc(sizeof(Lnode));  //Í·²å·¨
//	L2->next=NULL;
//	Lnode *p,*q,*r;
//	p=L->next;
//	r=L1;
//	while(p!=NULL){
//		r->next=p;
//		r=p;
//		p=p->next;
//		p->next=L2->next;
//		L2->next=p;
//		q=p->next;
//		p=q;
//	}
//	r->next=NULL;
//}
bool ListDelete(LinkList &L,int n){
	Lnode *p,*q;
	p=L;
	int i=1;
	if(i<=0) 
		return false;
	while(i<n&&p!=NULL){
		i++;
		p=p->next;
	}
	if(p==NULL)
		return false;
	else{
		q=p->next;
		if(p->next==NULL) 
			return false;
		p->next=q->next;
		free(q);
		return true;
	}
}


void Traverse(LinkList L){
	Lnode *p=L;
	while(p->next!=NULL){
		p=p->next;
		printf("%d",p->data);
	}
}

//void DeleteSameNum(LinkList &L,int e){                   //Á½¸öÖ¸Õë
//		Lnode *p=L;
//		Lnode *q=L;
//		while(p->next!=NULL){
//			q=p;
//			if(p->next->data==e){
//				q=p->next;
//				p->next=q->next;
//				free(q);
//			}	
//			else{
//				p=p->next;
//			}
//		}							
//}

void DeleteSameNum(LinkList &L,int e){					//Èý¸öÖ¸Õë
	Lnode *p=L->next;
	Lnode *pre=L;
	Lnode *q;
	while(p!=NULL){
		if(p->data==e){
			q=p;
			p=p->next;
			pre->next=p;
			free(q);
		}
		else{
			pre=p;
			p=p->next;
		}
	}
}

void apart(LinkList &L,LinkList &L1,LinkList &L2){
	L1=L;
	L2=(Lnode *)malloc(sizeof(Lnode));  //Í·²å·¨
	L2->next=NULL;
	Lnode *p,*q,*r;
	p=L->next;
	r=L1;
	while(p!=NULL){
		r->next=p;
		r=p;
		p=p->next;
		q=p->next;
		p->next=L2->next;
		L2->next=p;
		p=q;
	}
	r->next=NULL;
}

void deleteBdata(LinkList &L){
	int i;
	Lnode *p,*q,*s;
	p=L;
	i=p->next->data;
	while(p->next!=NULL){
		if(p->next->data>i){
			i=p->next->data;
			q=p;
			s=q->next;
		}
		p=p->next;
	}
	q->next=s->next;
	i=s->data;
	free(s);
	printf("%d",i);
}
void increaseSort(LinkList &L){
	Lnode *p,*q,*pre;
	p=L->next->next;
	L->next->next=NULL;
	while(p!=NULL){
		q=p->next;
		pre=L;
		while(pre->next!=NULL&&pre->next->data<p->data)
			pre=pre->next;
		p->next=pre->next;
		pre->next=p;
		p=q;
	}	
}

int main(){
	LinkList L;
	InitList(L);
	LastInsert(L);
//	HeadInsert(L);
	increaseSort(L);
	Traverse(L);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值