我是一只新晋的程序狗,感觉对这个兴趣还不错,有一点点c的基础,正在学c++入门和matlab入门,感觉这两个好难呀,老师上课讲的好难跟上,但是我会努力的。
从今天起,就开始写这个博客,记录每一天的心路历程,希望有一天能成为编程大神。
今日总结:
今天我主要做了c语言的一个数据结构练习,这个程序是错的,不过不要紧,我一步步调试就好。还做了一个关于matlab的优化算法的小练习,有点小难,发现函数很多,函数的参数也很多,help完全是英文的看不懂,急急急。至于c++,一脸萌币。。。。。。打算这星期学会一些简单的消息处理,完成老师布的一个小习题。
贴点代码
这个是按升序合并两个链表的代码,有很多不足,目前最大问题就是参数传递理解的不透彻,对于引用不理解,希望明天就能解决
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
typedef struct TagLNode{
int data;
struct TagLNode* next;
}LNode;
<span style="color:#33cc00;">/*在如上结构体中,TagLNode与LNode是否完全
没有区别?..............................
答案是否,就我目前理解看来,TagLNode,比
LNode要更“正式”一点,至少结构体中若要
再定义一个类型变量,当用TagLNode*/
</span>
LNode CreateNode()
{
<span style="color:#33cc00;">//创建单向链表
</span> LNode *p = NULL;
LNode *q = NULL;
LNode *pHead = NULL;
p = (LNode*)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next = NULL;
//LNode* pHead = p<span style="color:#33cc00;"><span style="color:#000000;">;</span>//建立头节点
</span>
do
{
q = (LNode*)malloc(sizeof(LNode));
q->next = NULL;
scanf("%d",&q->data);
p->next = q;
p = q;
}while(q->data!= -1);//此处是个死循环
return pHead;
}
void DestroyNode(LNode *pHead)
{
//销毁链表
LNode* Clean;
LNode* p;
LNode* q;
while(pHead->next != NULL)
{
Clean = pHead;
pHead = pHead->next;
free(Clean);
}
free(pHead);
pHead = NULL;
p = NULL;
q = NULL;
Clean = NULL;/*定义指针变量后,都赋为空
在程序结束后将所有指针型变量都释放,
养成良好习惯可以避免野指针出现*/
}
int _tmain(int argc, _TCHAR* argv[])
{
LNode *aHead = NULL;
LNode *bHead = NULL;
LNode *cHead = NULL;
LNode *c = NULL;
aHead = CreateNode();
bHead = CreateNode();
//先创建两个顺序数列
//合并到n里
if (aHead->data < bHead->data)
{
cHead = aHead;
c = cHead;
aHead = aHead->next;
}
else
{
cHead = bHead;
c = bHead;
bHead = bHead->next;
}
while( (aHead->next!=NULL) || (bHead->next!=NULL) )
{
if(aHead->data<=bHead->data)
{
c->next = aHead;
aHead = aHead->next;
c = c->next;
}
else
{
c->next = bHead;
bHead = bHead->next;
c = c->next;
}
}
DestroyNode(aHead);
DestroyNode(bHead);
DestroyNode(cHead);
return 0;
}