C-链表
2016-06-15 00:41
281 查看
单链表
每个节点设置一个数据域,一个指针域(用以指向其后继节点)。设单链表节点类型用LinkList表示
typedef struct LNode { ElemType data; struct LNode *next; }LinkList;
对于基础薄弱的人,可以看下这里的说明
typedef:表示将“struct data”用“LinkList”代替
ElemType:通用类型标识符,简单说你可以用任意类型替代它,如“int、char”等
struct LNode *next:这里之所以用“LNode”,是因为源码至上向下编译,所以在结构体内时,还不知“LinkList”是什么意思
单链表建立
尾插法个人认为这种要好理解一点,方便记忆
void CreateList(LinkList * &L,ElemType a[],int n) { LinkList *s,*r; L = (LinkList *)malloc(LinkList); r = L; for(i=0;i<n;i++) { s = (LinkList *)malloc(LinkList); s->data = a[i]; r->next = s; r = s; } r->next = NULL; }
头插法
这种写起来很简单,不过节点次序和原数组次序相反
void CreateList(LinkList * &L,ElemType a[],int n) { LinkList *s; L = (LinkList *)malloc(LinkList); L = NULL; for(i=0;i<n;i++) { s = (LinkList *)malloc(LinkList); s->data = a[i]; s->next = L->next; L->next = s; } }
单链表输出
void DispList(LinkList *L) { LinkList *p= L->next; while(p!=NULL) { printf("%d",p->data); p = p->next; } }
其实很多新手看来上面的,心中还是云里雾里。这里,我贴出一个完整的小例子,供大家学习参考。
#include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode *next; }LinkList; int main() { int i,a[5] = {1,2,3,4,5}; LinkList *head,*p,*tail; head = (LinkList *)malloc(sizeof(LinkList)); tail = head; for(i=0;i<5;i++) { p = (LinkList *)malloc(sizeof(LinkList)); p->data = a[i]; tail->next = p; tail = p; } tail->next = NULL; p = head->next; while(p!=NULL) { printf("%d\t",p->data); p = p->next; } printf("\n"); return 0; }
4000
最初写例子做测试的时候,习惯把所有程序写在主程序中。新手进行查看时可以很直观,不用考虑太多。不过,这样会导致代码不整洁,冗余严重。大家可以自行分离,加深对程序的理解。
相关文章推荐
- akira之修改linux 3.6.8内核并添加系统调用
- 串口数据异常,数据段获取到两段或者三段
- win7与virtualbox安装的ubuntu系统资源相互访问
- leetcode_c++:Majority Element(169)
- Android Material Design (底部导航栏)
- C/C++基本数据类型所占字节数
- 小兔伴伴家庭动物园AR智能早教产品上市
- 【算法】字符串匹配之Z算法
- C语言课程设计第二次作业
- 代码大全读书笔记2---用隐喻来充分理解软件开发
- Apereo CAS - 1
- 三角形内部的整点的个数
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- android提醒事件
- JSON
- MapReduce
- android事件分发教程(一):View
- Redis3.0 配置文件说明
- 软工:CMMI
- MACHINE LEARNING IN ACTION KNN