linkList 简单链式链表的实现
2018-06-10 15:03
190 查看
单向链表实现的结构图
底层链表只需要有一个linkList就可以了,里面保存这指向第一个节点的指针,同时还有一个长度变量。
Element 是一个结构体,包含了linkListNode结构体,同时包含了自己的其他信息。
单向链表的操作没有复杂的内容,记得每次将next赋值为NULL。插入删除操作也没有什么太大区别,就是当删除最后一个元素的时候需要注意一下。
typedef struct _Element
{
linkListNode node;
int val;
}Element;
#ifndef LINKLIST_H_INCLUDED #define LINKLIST_H_INCLUDED //定义节点 typedef struct _linkListNode { struct _linkListNode* next; }linkListNode; //定义控制中心 typedef struct _linkList { linkListNode head; int length; }linkList; linkList* Creat(); int Insert(linkList* llist, linkListNode * node, int pos); linkListNode* Delete(linkList* llist, int pos); int Destroy(linkList* llist); int Clear(linkList* llist); int Length(linkList* llist); linkListNode* Get(linkList* llist, int pos); #endif // LINKLIST_H_INCLUDED
#include <stdio.h> #include <stdlib.h> #include "linkList.h" linkList* Creat() { linkList * ret = (linkList * )malloc(sizeof(linkList)); if(ret == NULL) return NULL; memset(ret, 0, sizeof(linkList)); ret->length = 0; ret->head.next = NULL; return ret; } int Insert(linkList* llist, linkListNode * node, int pos) { if(llist==NULL || node==NULL || pos<0 || pos>llist->length) { printf("Bad Parm!\n"); return -1; } linkListNode* current = (linkListNode*)llist; for(int i=0; i<pos; ++i) current = current->next; node->next = current->next; current->next = node; llist->length++; return 0; } linkListNode* Delete(linkList* llist, int pos) { if(llist==NULL || pos<0 || pos>llist->length-1) { printf("Bad Parm!\n"); return -1; } linkListNode* current = (linkListNode*)llist; for(int i=0; i<pos; ++i) current = current->next; linkListNode* ret = current->next;
//如果删除的是最后一个元素,需要特殊处理一下 if(current->next->next == NULL) { current->next = NULL; llist->length--; return ret; } current->next = current->next->next; llist->length--; return ret; } int Length(linkList* llist) { if(llist==NULL) return -1; return llist->length; } int Destroy(linkList* llist) { if(llist==NULL) return -1; free(llist); return 0; } int Clear(linkList* llist) { if(llist==NULL) return -1; llist->length = 0; llist->head.next = NULL; } linkListNode* Get(linkList* llist, int pos) { if(llist==NULL || pos<0 || pos>llist->length-1) { printf("Bad Parm!\n"); return -1; } linkListNode* current = (linkListNode*)llist; for(int i=0; i<pos; ++i) current = current->next; return current->next; }
相关文章推荐
- linkList C++简单链式链表的实现
- 用链表实现队列--链式队列
- 算法与数据结构基础7:C++双链表的简单实现
- 类链表的简单实现
- 单链表的链式实现例程
- 链表的简单实现--C
- 利用模板实现简单的栈类(数组和单链表)
- 每日一省————链表之队列的简单实现
- LinkedList链表实现队列应用的简单实例
- 链表基本操作的C语言简单实现
- 算法导论第三版第十章 单链表实现栈和队列(思路简单清晰)
- 链表简单实现---栈
- 一、(2)C++ 实现简单的线性表(链式存储结构 - 单链表)
- 链表LinkList.c实现
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- php实现简单的单链表
- 单向链表装载用户自定义数据的c语言实现 linklistpackagenode.h 和 linklistpackagenode.c
- 简单实现双向循环链表
- 一个通用链表的简单实现
- 简单链表的实现和输出