C-链表
来源:互联网 发布:遥感数据下载 编辑:程序博客网 时间:2024/06/04 19:15
单链表
每个节点设置一个数据域,一个指针域(用以指向其后继节点)。
设单链表节点类型用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;}
最初写例子做测试的时候,习惯把所有程序写在主程序中。新手进行查看时可以很直观,不用考虑太多。不过,这样会导致代码不整洁,冗余严重。大家可以自行分离,加深对程序的理解。
0 0
- C链表
- c 链表
- 链表(C#)
- C链表
- C 链表
- [C]链表
- C 链表
- 【C++】链表
- C 链表
- c链表
- C-链表
- c 链表
- C链表
- c链表
- 链表 c
- C++:链表
- C 链表
- C语言泛型初探----C链表
- spring笔记:第二章(1)
- akira之修改linux 3.6.8内核并添加系统调用
- LNK2005 int * c? already defined in *.obj
- 递归算法
- 串口数据异常,数据段获取到两段或者三段
- C-链表
- ajax 的 async属性
- pycharm快捷键
- Android App 性能优化之图片优化
- 《数值分析》总结
- 网络篇——android中的Http(一)之Http协议基础
- CSDN code 心得
- <h1 class="title">jquery的checkbox,radio,select等方法总结</h1> <div class="meta"><time datetime="201
- px4开发指南——linux下qgroundcontrol地面站安装