C语言学习笔记

学习内容

计算概论(基于C语言,北大主干基础课)
从问题到程序————程序设计与C语言引论
数据结构(基于C语言,北大主干基础课)
C语言程序设计——课程材料、参考材料和讨论
最常用标准库函数
裘宗燕(Qiu Zongyan) 北京大学数学学院信息科学系教授

习题

  1. 写出运行结果

include

int main() {
unsigned int i = -2;
int j = ~i;
printf("%d\n", j);
}
2) 写出运行结果

include

void swap(int &a, int &b) {
a ^= b ^= a ^= b;
}

int main() {
int m = 5, n = 3;
swap(m, n);
printf("m = %d, n = %d\n", m, n);
}

表的顺序表示 答案

/ 定义顺序表的大小。应根据需要修改 /

define MAXNUM 20

/ 定义顺序表的元素类型。应根据需要修改 /
typedef int DataType;

struct SeqList {
int n; /* 存放线性表中元素的个数 n

表的链接表示 答案

/ 定义链接表元素类型。应根据需要定义 /
typedef int DataType;

struct Node; / 单链表结点类型 /
typedef struct Node PNode; / 结点指针类型 /
typedef struct Node
LinkList; / 单链表类型 /

struct Node { / 单链表结点结构 /
DataType info;
PNode link;
};

/ 创建一个带头结点的空链表 /
LinkList createNullList_link(void);

/ 释放一个带头节点的链表 /
void freeList_link(LinkList llist);

/ 判断llist带有头结点的单链表是否是空链表 /
int isNullList_link(LinkList llist);

/ 在llist带头结点的单链表中下标为i的(第i+1个)结点前插入元素x /
int insert_link(LinkList llist, int i, DataType x);

/ 在llist带有头结点的单链表中删除第一个值为x的结点 /
int delete_link(LinkList llist, DataType x);

/ 在llist带有头结点的单链表中找第一个值为x的结点存储位置 /
PNode locate_link(LinkList llist, DataType x);

/ 在带有头结点的单链表llist中求下标为i的(第i+1个)结点的存储位置 /
/ 当表中无下标为i的(第i+1个)元素时,返回值为NULL /
PNode find_link(LinkList llist, int i);

二叉树

include

include

typedef int Data;

struct Node {
Data data;
struct Node left;
struct Node
right;
};

typedef struct Node *PNode;

PNode createNode(Data data) {
PNode p = (PNode)malloc(sizeof(struct Node));
if(!p) {
printf("Out of memory!\n");
exit(-1);
}
p->data = data;
p->left = NULL;
p->right = NULL;
return p;
}

void appendNode(PNode &btree, Data data) {
if(!btree) {
btree = createNode(data);
return;
}
appendNode(data data ? btree->left : btree->right, data);
}

void preOrder(PNode btree, void (*func)(PNode)) {
if(!btree) return;
func(btree);
preOrder(btree->left, func);
preOrder(btree->right, func);
}

void inOrder(PNode btree, void (*func)(PNode)) {
if(!btree) return;
inOrder(btree->left, func);
func(btree);
inOrder(btree->right, func);
}

void postOrder(PNode btree, void (*func)(PNode)) {
if(!btree) return;
postOrder(btree->left, func);
postOrder(btree->right, func);
func(btree);
}

void freeNode(PNode btree) {
postOrder(btree, (void (*)(PNode))free);
}

/ */

void printNode(PNode p) {
if(!p) return;
printf("%d ", p->data);
}

int main() {
Data a[] = {12, 3, 5, 8, 7, 13, 17, 12};
int len = sizeof(a)/sizeof(a[0]);
PNode btree = NULL;

for(int i=0; i

贪心、递归、递推和动态规划

文章一
文章二
文章三
文章四

基本算法之分治

include

int Partion(int *a, int left, int right) {
int pivot = a[left];
while(left = pivot) --right;
if(left
文章一
文章二
文章三

基本算法之搜索

文章一
文章二
文章三

关键字:c

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部