数据结构代码分享--线性表(1)

第一次改代码改到了现在,也体会到了出思路和Debug的不易。
其实有时候觉得,做算法题还是很快乐的。

不多说了,下面开始代码分享了。

链表储存结构:

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

1.将循环链表就地逆序
首先,给出验证代码
(1)显示链表L

void display(LinkList L)
{ LinkList p;
  p = L->next;
  printf("\n");
  while(p)
  {
  	printf("%d-> ",p->data);
  	p = p->next;
  }
}

(2)建立循环链表L

void Insert_xunhuan(LinkList &L,int e){
	LinkList p=L,s;
	if(L->next!=NULL)  p=L->next;

	while(p->next!=L->next){		//找到尾结点 
		p=p->next;
	}
	s=new LNode ;		插入节点
	s->data=e;
	p->next=s;
	s->next=L->next;			
}

(3)就地逆置

void Trans(LinkList &L){
	LinkList p=L->next,f,m,b;
	f=p;
	m=f->next;
	b=m->next;
	while(b!=L->next){
		m->next=f;
		f=m;m=b;b=b->next;
	}	
	m->next=f;
	L->next=m;
	p->next=m;
}

原理:运用了三个指针进行改变顺序。

2.删除链表中大于等于mink且小于等于maxk的值

void Delete(LinkList &L,int min,int max){
	LinkList p=L,q=L->next,r;
	if(max<min){
		printf("输入错误!");
		return; 
	}
	if(p->next->data>min) return;

	while((p->next->data<min)&&p) p=p->next;	//p指向min前一个值 
	while(q->next&&(q->data<max)) q=q->next;	//q指向max值 
	r=p->next;									//r指向min值 
	p->next=q->next;							//修改指针 
	while(r!=q){								//释放结点
		p=r->next;										 
		free(r);
		r=p;
	}
	free(q);
}

该代码的难点在于如何考虑多种情况发生带来的错误值。

今天代码分享就到这里,以上,祝好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值