数据结构:线性表的链式存储
2016-01-20 10:29
399 查看
笔者在上一篇整理了线性表的顺序存储的代码数据结构:线性表的顺序存储
,本文讲解线性表的链式存储,编译环境还是vs2012,大家可以直接复制过去使用。
1 main.cpp
2 linklist.h 头文件
参考文献:
传智播客 免费公开课
,本文讲解线性表的链式存储,编译环境还是vs2012,大家可以直接复制过去使用。
1 main.cpp
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "linklist.h" typedef struct Teacher { LinkListNode* node; int age; char name[64]; }Teacher; void main() { int len = 0; int ret = 0 ; int i = 0; LinkList* list = NULL; Teacher t1,t2,t3,t4,t5; t1.age = 31; t2.age = 32; t3.age = 33; t4.age = 34; t5.age = 35; t1.name[64] = NULL; t2.name[64] = NULL; t3.name[64] = NULL; t4.name[64] = NULL; t5.name[64] = NULL; list = LinkList_Create(); if (list == NULL) { return ; } len = LinkList_Length(list); ret = LinkList_Insert( list,(LinkListNode*) &t1, 0); ret = LinkList_Insert( list,(LinkListNode*) &t2, 0); ret = LinkList_Insert( list,(LinkListNode*) &t3, 0); ret = LinkList_Insert( list,(LinkListNode*) &t4, 0); ret = LinkList_Insert( list,(LinkListNode*) &t5, 0); //遍历 for (i = 0;i<LinkList_Length(list);i++) { Teacher * tmp = (Teacher * )LinkList_Get(list,i); if (tmp == NULL) { return ; } printf ("tmp->age:%d ",tmp->age); } printf("\n"); //删除链表 while (LinkList_Length(list) >0) { Teacher *tmp = (Teacher*)LinkList_Delete(list,0); if (tmp == NULL) { return ; } printf ("删除链表tmp->age:%d ",tmp->age); } LinkList_Destroy(list); printf("hello... \n"); system("pause"); return ; }
2 linklist.h 头文件
#ifndef _MYLINKLIST_H_ #define _MYLINKLIST_H_ typedef void LinkList ; typedef struct _tag_LinkListNode { struct _tag_LinkListNode* next; }LinkListNode; LinkList* LinkList_Create(); void LinkList_Destroy(LinkList* list); void LinkList_Clear(LinkList* list); int LinkList_Length(LinkList* list); int LinkList_Insert(LinkList* list,LinkListNode* node,int pos); LinkListNode* LinkList_Get(LinkList* list,int pos); LinkListNode* LinkList_Delete(LinkList* list,int pos); #endif3 linklist.cpp 头文件中函数的使用
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "linklist.h" typedef struct _tag_LinkList { LinkListNode header; int length; }TLinkList; LinkList* LinkList_Create() { TLinkList *ret = NULL; ret = (TLinkList*)malloc(sizeof(TLinkList)); memset(ret, 0 , sizeof(TLinkList)); ret->length = 0; ret->header.next = NULL; return ret; } void LinkList_Destroy(LinkList* list) { if (list != 0) { free(list); list =NULL; } return ; } void LinkList_Clear(LinkList* list) { TLinkList *tlist = NULL; if(list == NULL) { return; } tlist = (TLinkList* )list; tlist->length = 0; tlist->header.next = NULL; return ; } int LinkList_Length(LinkList* list) { TLinkList *tlist = NULL; if(list == NULL) { return 0; } tlist = (TLinkList* )list; return tlist->length; } int LinkList_Insert(LinkList* list,LinkListNode* node,int pos) { int ret=0; int i=0; TLinkList* tlist = NULL; LinkListNode* current=NULL; if (list == NULL || node==NULL || pos<0) { ret = 0; printf("func LinkList_Insert err: % d \n",ret); return ret; } tlist = (TLinkList*)list; current=&(tlist->header); for (i=0;i<pos && (current->next !=NULL);i++) { current = current->next; } //核心第一步 node->next = current->next; //核心第二步 current->next = node; tlist->length++; return 0; } LinkListNode* LinkList_Get(LinkList* list,int pos) { int ret=0; int i=0; TLinkList* tlist = NULL; LinkListNode* current=NULL; if (list == NULL || pos<0) { ret = 0; printf("func LinkList_Get err: % d \n",ret); return NULL; } tlist = (TLinkList*)list; current=&(tlist->header); for (i=0;i<pos && (current->next !=NULL);i++) { current = current->next; } return current->next; } LinkListNode* LinkList_Delete(LinkList* list,int pos) { int i=0; TLinkList* tlist = NULL; LinkListNode* current=NULL; LinkListNode* ret=NULL; if (list == NULL || pos<0) { printf("func LinkList_Delete err \n"); return NULL; } tlist = (TLinkList*)list; current=&(tlist->header); for (i=0;i<pos && (current->next !=NULL);i++) { current = current->next; } ret = current->next; current->next=ret->next; tlist->length--; return ret; }
参考文献:
传智播客 免费公开课
相关文章推荐
- 数据结构:线性表的顺序存储
- java 实现数据结构之线性表
- 数据结构实现之Bag背包
- 学习笔记------数据结构(C语言版)栈应用 括号匹配
- 优先队列——斜堆
- 算法与数据结构学习资源大搜罗——良心推荐
- 树的重心求法POJ3107
- 学习笔记------数据结构(C语言版)进制转换
- 使用XML文件输入和输出和YAML文件 目标 你会发现以下问题的答案: 如何打印和阅读文本条目文件和OpenCV使用YAML或XML文件? 如何为OpenCV做同样的数据结构?
- 学习笔记------数据结构(C语言版)栈的顺序存储
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 优先队列——左式堆
- 数据结构线性表—静态顺序表的实现