#ifndef _LINKLIST_H_ #define _LINKLIST_H_ typedef void LinkList; typedef struct _tag_LinkListNode LinkListNode; struct _tag_LinkListNode { LinkListNode* next; }; LinkList* LinkList_Create(); void LinkList_Destroy(LinkList* list); void LinkList_Clear(LinkList* list); int LinkList_Empty(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); #endif #include <stdio h=""> #include <malloc h=""> #include "LinkList.h" typedef struct _tag_LinkList { LinkListNode header; int length; } TLinkList; LinkList* LinkList_Create() { TLinkList* ret = (TLinkList*)malloc(sizeof(TLinkList)); if(ret != NULL) { ret->header.next = NULL; ret->length = 0; } return ret; } void LinkList_Destroy(LinkList* list) { free(list); } void LinkList_Clear(LinkList* list) { TLinkList* slist = (TLinkList*)list; if(slist != NULL) { slist->header.next = NULL; slist->length = 0; } } int LinkList_Empty(LinkList* list) { TLinkList* slist = (TLinkList*)list; int ret = 0; if((slist != NULL) && (slist->length == 0)) { ret = 1; } return ret; } int LinkList_Length(LinkList* list) { TLinkList* slist = (TLinkList*)list; int ret = -1; if(slist != NULL) { ret = slist->length; } return ret; } int LinkList_Insert(LinkList* list, LinkListNode* node, int pos) { TLinkList* slist = (TLinkList*)list; int i = 0; int ret = (slist != NULL) && (0 <= pos); if(ret) { LinkListNode* current = (LinkListNode*)slist; for(i=0;(i < pos) && (current->next != NULL);i++) { current = current->next; } node->next = current->next; current->next = node; slist->length++; } return ret; } LinkListNode* LinkList_Get(LinkList* list, int pos) { TLinkList* slist = (TLinkList*)list; LinkListNode* ret = NULL; int i = 0; if((0 <= pos) && (pos < slist->length)) { LinkListNode* current = (LinkListNode*)slist; for(i=0;i<pos i="" current="current-">next; } ret = current->next; } return ret; } LinkListNode* LinkList_Delete(LinkList* list, int pos) { TLinkList* slist = (TLinkList*)list; LinkListNode* ret = NULL; int i = 0; if((slist != NULL) && (0 <= pos) && (pos < slist->length)) { LinkListNode* current = (LinkListNode*)slist; for(i=0;i<pos i="" current="current-">next; } ret = current->next; current->next = ret->next; slist->length--; } return ret; } #include <stdio h=""> #include <stdlib h=""> #include "LinkList.h" /* run this program using the console pauser or add your own getch, system("pause") or input loop */ typedef struct value { LinkListNode header; char c; } DataElem; int main(int argc, char *argv[]) { LinkList* list = LinkList_Create(); DataElem v1,v2,v3,v4,v5,v6; v1.c = 'a'; v2.c = 'b'; v3.c = 'c'; v4.c = 'd'; v5.c = 'e'; v6.c = 'f'; int i = 0; LinkList_Insert(list,(LinkListNode*)&v1,0); LinkList_Insert(list,(LinkListNode*)&v2,0); LinkList_Insert(list,(LinkListNode*)&v3,0); LinkList_Insert(list,(LinkListNode*)&v4,0); LinkList_Insert(list,(LinkListNode*)&v5,0); LinkList_Insert(list,(LinkListNode*)&v6,0); for(i=0;i<LinkList_Length(list);i++) { DataElem* p = (DataElem*)LinkList_Delete(list,LinkList_Length(list)-1); printf("the element is %c\n",(*p).c); } LinkList_Clear(list); printf("LinkList is Empty(%d)\n",LinkList_Empty(list)); LinkList_Destroy(list); return 0; } </linklist_length></stdlib></stdio>
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】详细剖析线性表
【数据结构】第二章——线性表(9)总结了线性表的基本知识点,并对循序表与链表进行了比较
数据结构 C语言 线性表 顺序表 链表 -
数据结构-线性表|顺序表|链表(中)
内容提要:
数据结构 线性表 -
【数据结构】线性表
线性表:是一种最常用、最简单,也是最基本的数据结构。
数据结构 链表 算法 java 结点 -
数据结构(一)线性表双向链表
(一)定义 (二)结点结构 (三)双向链表结构 双向循环链表 带有头结点的空链表 带有头结点的数据链表 (四)实现双向链表 (五)打印预览 (六)总结
结点 链表 头结点 双向链表 #define