数据结构之顺序链表
来源:互联网 发布:cc网络验证模块源码 编辑:程序博客网 时间:2024/04/27 05:20
学习数据结构已经很久了,一直没有用上,最近时间有点空闲,所以翻出来炒一炒。子曰:温故而知新。当初学习数据结构的时候,买的是国嵌唐老师的视频,所以这些代码和唐老师课上写的几乎一模一样,若转载请注明出自国嵌唐老师数据结构教程。
首先来看第一个例子,顺序表:
头文件
#ifndef _SEQLIST_H_#define _SEQLIST_H_typedef void SeqList;typedef void SeqListNode;SeqList* SeqList_Create(int capacity);void SeqList_Destroy(SeqList* list);int SeqList_Clean(SeqList* list);int SeqList_Length(SeqList* list);int SeqList_Capacity(SeqList* list);int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);SeqListNode* SeqList_Delete(SeqList* list, int pos);SeqListNode* SeqList_Get(SeqList* list, int pos);#endif
我个人有点小小的强迫症,代码尽量要求简洁,所以没有注释,有什么不明白的可以留言。
实现文件
#include "SeqList.h"#include <stdio.h>#include <malloc.h>typedef unsigned int TSeqListNode;typedef struct tag_SeqList{ intlength; int capacity; TSeqListNode* node;}TSeqList;SeqList* SeqList_Create(int capacity){ TSeqList* ret = NULL; if (capacity >= 0) { ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode) * capacity); if (ret) { ret->capacity = capacity; ret->length = 0; ret->node = (TSeqListNode*)(ret + 1); return (SeqList*)(ret); } } return ret;}void SeqList_Destroy(SeqList* list){ free(list);}int SeqList_Clean(SeqList* list){ TSeqList* sList = (TSeqList*)list; int ret = -1; if (sList != NULL) { sList->length = 0; } return ret;} int SeqList_Length(SeqList* list){ TSeqList* sList = (TSeqList*)list; int ret = -1; if (sList != NULL) { ret = sList->length; } return ret;}int SeqList_Capacity(SeqList* list){ TSeqList* sList = (TSeqList*)list; int ret = -1; if (sList != NULL) { ret = sList->capacity; } return ret;}int SeqList_Insert(SeqList* list, SeqListNode* node, int pos){ TSeqList* sList = (TSeqList*)list; int i = 0; int ret = (sList != NULL) && (node != NULL);ret = (sList->length + 1 <= sList->capacity) && (pos >= 0); if (ret) { if (pos > sList->length) { pos = sList->length; } for (i = sList->length; i > pos; i--) { sList->node[i] = sList->node[i - 1]; } sList->node[pos] = (TSeqListNode)node; sList->length++;} return ret;}SeqListNode* SeqList_Delete(SeqList* list, int pos){ TSeqList* sList = (TSeqList*)list; int i = 0; SeqListNode* ret = NULL; if ((sList != NULL) && (pos >= 0) && (pos < sList->length)) { ret = (SeqListNode*)(sList->node[pos]); for (i = pos + 1; i < sList->length; i++) { sList->node[i - 1] = sList->node[i]; } sList->length--;} return ret;}SeqListNode* SeqList_Get(SeqList* list, int pos){ TSeqList* sList = (TSeqList*)list;SeqListNode* ret = NULL; if ((sList != NULL) && (pos >= 0) && (pos < sList->length)) {ret = (SeqListNode*)sList->node[pos];} return ret;}测试文件
<pre name="code" class="cpp">#include <stdio.h>#include <stdlib.h>#include "SeqList.h"int main(int argc, char *argv[]){ SeqList* list = SeqList_Create(10); int a = 1; int b = 2; int c = 3; int d = 4; int e = 5; int f = 6; int i = 0; SeqList_Insert(list, &a, 0); SeqList_Insert(list, &b, 0); SeqList_Insert(list, &c, 0); SeqList_Insert(list, &d, 0); SeqList_Insert(list, &e, 0); SeqList_Insert(list, &f, 0); printf("length = %d\n", SeqList_Length(list)); for (i = 0; i < SeqList_Length(list); i++) { int* p = SeqList_Get(list, i); printf("%d\n", *p); } SeqList_Clean(list); for (i = 0; i < SeqList_Length(list); i++) { int* p = SeqList_Get(list, i); printf("%d\n", *p); } printf("capacity = %d\n", SeqList_Capacity(list)); SeqList_Insert(list, &a, SeqList_Length(list)); SeqList_Insert(list, &b, SeqList_Length(list)); SeqList_Insert(list, &c, SeqList_Length(list)); SeqList_Insert(list, &d, SeqList_Length(list)); SeqList_Insert(list, &e, SeqList_Length(list)); SeqList_Insert(list, &f, SeqList_Length(list)); for (i = 0; i < SeqList_Length(list); i++) { int* p = SeqList_Get(list, i); printf("%d\n", *p); } printf("capacity = %d\n", SeqList_Length(list)); while(SeqList_Length(list) > 0) { int* p = SeqList_Delete(list, SeqList_Length(list) - 1); printf("%d\n", *p); } SeqList_Destroy(list); system("PAUSE"); return 0;}
上面代码都可以放到工程里面直接用,对于嵌入式开发的不能用到很多集成库,很多东西都要自己写,所以上面的代码是可复用的。
0 0
- 数据结构之顺序链表
- 数据结构之顺序链表
- 数据结构之 顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- HDFS2.2.0集群的HA高可靠配置
- 各个版本的iphone QQ
- 信号处理函数sigaction()
- 【android】关于getBaseContext();this等-----项目中遇到的问题
- 读书笔记---触摸事件与手势识别
- 数据结构之顺序链表
- 哈哈哈哈哈
- 数据结构学习笔记-排序2
- linux下的stdin,stdout,stderr详解
- linux编程中显示文件名,函数名,行号
- win7-Wmvare 上安装 64 位linux
- JDBC操作
- addSubview和insertSubview 区别
- 家用制氧机怎样选择