[行路难]——开始漫漫编程路

入门的C

大一学习了C语言课程之后,对编程还是有些兴趣的,用代码解决一些小问题很满足的,尤其是在调试成功没有报出奇奇怪怪的错误的时候。最兴奋的自然是通过了全部的测试样例,感觉整个人飘飘然嘻嘻!回首大一的C语言课程,真的是入门级的简单(除了函数、指针、结构体哈),有些是永恒的难点,不管在哪个领域。

数据结构

一门神奇的课在大二开展,老师把课生动地讲成三部曲:逻辑结构、存储结构、算法,节节如此,课课亦然。开始急于看到所谓的代码功效,不知天高地厚地给老师写了邮件说考虑现场编程,才得知这门课更重要的是思维,此刻突然想复习数据结构了,安排上!第一次上机漏洞百出,不过很感谢老师的讲解,下附心得感悟和部分代码嘻嘻!

  1. 顺序表逆置
    数据顺序存入数组中,我们逆向输出即可达到逆置效果;
void invert(sequenlist*L)
{
	for (int i = L->last; i >= 1; i--)
	{
		printf("%2c", L->date[i]);
	}
	printf("\n");
}
  1. 单链表逆置
    开始思考的时候不知从头断还是从尾断,从头断开之后想的是找不到下一个元素了,从未断开之后则找不到上一个元素了。后来也没有想出来,借鉴了同学的代码。
    她使用了两个指针,一个依次指向单链表的每一个元素,另一个进行神奇的逆置操作,相当于把相邻元素断开,把后一个元素放到前一个元素前面达到逆置的目的。
    这一题中对我来说是头结点的理解不够,链表第一个结点的位置存放在头结点的指针域中,开辟出头结点的位置后要将头结点的指针域先指向空,这两点明白之后才真正理解了头插法;
void invert(linklist *head)
{
	linklist*p ,*q;
	p=head->next;
	head->next=NULL;
	while (p != NULL)
	{
		q=p;
		p=p->next;
		
		q->next=head->next;
		head->next=q;
	}
}
  1. 分解单链表
    分类标准不难,但是难的是明确指针到底指到了哪里。在学习的时候应该牢记指针指向的是一个地址,不可复制;
//添加按字母、数字、其它字符分解单链表算法
void resolve(linklist*head,linklist*letter,linklist*digit,linklist*other)
{
	linklist*p=head->next;
	linklist*pl=letter,*pd=digit,*po=other; 
	while(p!=NULL)
	{
		if((p->data)>='0'&&(p->data)<='9')
		{
			pd->next=p;
			pd=pd->next;
		}
		else if(((p->data)>='a'&&(p->data)<='z')||((p->data)>='A'&&(p->data)<='Z'))
		{
			pl->next=p;
			pl=pl->next;
			insert_head(letter, p);
		}
		else
		{
			po->next=p;
			po=po->next;
			insert_head(other, p);
		}
		p=p->next;
		pl->next=letter;
		pd->next=digit;
		po->next=other;
	}
}
  1. 判断字符串是否中心对称
    在循环的时候要像计算机一样笨笨地演练一遍,检查计数的变量初始值或者进入判断时的值有没有达到预期。
//添加判字符串是否中心对称算法
int symmetry(linklist*head,stack*s)
{
	linklist*p=head->next;
	int n=1;
	int temp=1;//返回值,用1.0表示是否中心对称 
	while(p!=NULL)
	{
		if(length(head)%2==0)//字符串为偶数,入栈一半后出栈与后半部分比较 
		{
			if(n>length(head)/2)
			{
				if(p->data!=pop(s))//一旦有一个不等,变量temp置于0 
				temp=0;	
			}
			else
			{
				push(s,p->data);
			}	
			n++;	
		}
		else//字符串为奇数,入栈一半后跳过最中间的数出栈与后半部分比较 
		{
			if(n>(length(head)/2)+1)
			{ 
				if(p->data!=pop(s))//一旦有一个不等,变量temp置于0 
				temp=0;	
			}
			else if(n<(length(head)/2)+1)
			{
				push(s,p->data);
			}			
			n++;
		}
		p=p->next;//指向下一个元素						
	}
	return temp;
}

BTW,昨天听同学讲了2h的微信小程序前端开发,很敬佩。我知道,一些东西在向我慢慢靠近,而我也在主动的靠近着他们呢。编程路漫漫,请你踏实干!

愿晴空万里,没有暴风雨
晴空万里,没有暴风雨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值