程序员乐园
#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>
蹲一个后续
支持 1/3 + 1/3 吗?
没用了 雅虎的接口废了
能用吗 为什么我报错了
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!
· 【译】Visual Studio(v17.13)中新的调试和分析特性
· Draw.io:你可能不知道的「白嫖级」图表绘制神器