2015-12-01

来源:互联网 发布:泗洪网络问政 编辑:程序博客网 时间:2024/05/16 09:26

坚持学习的第三天

1.leetcode单链表系列

做了,反转单链表,删除有序单链表的重复node,整合两个有序但链表,都自己做对了,但是没有看过别人方法,应该可以更好。

反转单链表:

class Solution {public:    ListNode* reverseList(ListNode* head) {        ListNode *p,*q,*l;        if(head == NULL || head -> next == NULL ) return head;        p = head ;        l = q = head -> next;        p -> next = NULL;        while(1)        {            if(q  == NULL) return p;            l = q;            q = q-> next;            l -> next = p;                        p = l;        }    }};
删除有序单链表的重复node:

class Solution {public:    ListNode *deleteDuplicates(ListNode *head) {        if(head == NULL ) return head;        if(head -> next == NULL ) return head;        ListNode *l,*f,*b;        f = head;        b = head -> next;        while(1){            if(b == NULL) {                f -> next = NULL;                return head;            }            if(f -> val == b -> val){                b = b -> next;            }            else {                f -> next = b;                f = b;                b = b -> next;            }        }    }};
整合两个有序但链表:

class Solution {public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        if(l1 == NULL ) return l2;        if(l2 == NULL) return l1;                ListNode *l,*p,*q,*pos;        p = l1;        q = l2;        if(l1 -> val <= l2 -> val) {            l = p;            p = p -> next;            pos = l;        }        else {            l = q;            q = q -> next;            pos = l;        }                while(1) {            if(p == NULL){                pos -> next = q;                return l;            }            if(q == NULL){                pos -> next = p;                return l;            }            if(p -> val <= q -> val){                pos -> next = p;                pos = p;                p = p -> next;            }            else{                pos -> next = q;                pos = q;                q = q -> next;            }        }    }};

交换两个node,没做出来

2.学习C代码内存布局

一个程序本质有三部分组成:BBS段,data段,text段
在采用段式内存管理的架构中:
BSS段:Block Started by Symbol,用来存放程序中未初始化的全局变量的一块内存区域。属于静态内存分配
data段:存放程序中已经初始化的全局变量的一块内存区域。属于静态内存分配
堆,动态分配,可以扩张或者减小
栈,程序的临时创建的局部变量
静态数据区:已初始化的全局变量,静态变量和常量。
text段(代码段):用来存放程序执行代码的一块内存区域。这部分大小在程序运行前就已经确定,并且内存区域属于只读。




什么是静态内存分配和动态内存分配
http://www.cnblogs.com/lebronjames/archive/2010/07/18/1780154.html

0 0
原创粉丝点击