我是一只新晋程序狗

    我是一只新晋的程序狗,感觉对这个兴趣还不错,有一点点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;

/*在如上结构体中,TagLNode与LNode是否完全
没有区别?..............................
答案是否,就我目前理解看来,TagLNode,比
LNode要更“正式”一点,至少结构体中若要
再定义一个类型变量,当用TagLNode*/


LNode CreateNode()
{
	//创建单向链表
	LNode *p = NULL;
	LNode *q = NULL;
	LNode *pHead = NULL;

	p = (LNode*)malloc(sizeof(LNode));
	scanf("%d",&p->data);
	p->next = NULL;
	//LNode* pHead = p;//建立头节点

	
	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;
}



你可能感兴趣的:(c语言)