main.c
#include<stdlib.h> #include<stdio.h> #include"linklist.h" typedef struct Teacher { LinkListNode node; int age; char name[65];//c语言中没有string类型 }Teacher; int main() { int i = 0; Teacher t1, t2, t3, t4; int rcapacity = 0; int rlegth = 0; int ret = 0; LinkList * list = NULL; t1.age = 21; t2.age = 22; t3.age = 23; t4.age = 24; list = LinkList_Create(); 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); if (list == NULL) { printf("2 list == NULL "); return -1; } //printf("%d ", LinkList_Length(list)); for (i = 0; i < LinkList_Length(list); i++) { // printf("%d ", LinkList_Length(list) ); Teacher * temp = (Teacher *)LinkList_Get(list, i); printf(" %d ", temp->age); } LinkList_Delete( list, 0); printf("hello "); }
linklist.h
#pragma once typedef void LinkList; typedef struct _tag_LinkListNode { struct _tag_LinkListNode* next; }LinkListNode; LinkList * LinkList_Create(); void LinkList_Destory(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);
linklist.c
#include "linklist.h" #include<stdlib.h> #include<stdio.h> typedef struct _tag_LinkList { int length; LinkListNode header; }TLinkList; LinkList * LinkList_Create() { TLinkList *Tlist = NULL; Tlist = (TLinkList*)malloc(sizeof(TLinkList)); memset(Tlist, 0, sizeof(TLinkList)); } void LinkList_Destory(LinkList *list) { if (list != NULL) { free(list); list = NULL; } } void LinkList_Clear(LinkList* list) { TLinkList *Tlist = NULL; if (list == NULL) { return; } Tlist = (TLinkList *)list; Tlist->length = 0; Tlist->header.next = NULL; } int LinkList_Insert(LinkList* list, LinkListNode* node, int pos) { TLinkList *Tlist = NULL; int i = 0; LinkListNode *current = NULL; if (list == NULL || node == NULL || pos < 0) //检查这一步总是遗忘 { return 0; } Tlist = (TLinkList *)list; current = &(Tlist->header); // 这里忘记写了 for (i = 0; i < pos; i++) // 这里写错了 { current = current->next; } node->next = current->next; current->next = node; Tlist->length++; //printf("LinkList_Insert 中的length = %d ", Tlist->length); return 0; } int LinkList_Length(LinkList* list) { int j = 0; TLinkList *Tlist = NULL; if (list == NULL) { return -1; } Tlist = (TLinkList *)list; //printf("LinkList_Length 中的length = %d ", Tlist->length); return Tlist->length; } LinkListNode* LinkList_Get(LinkList* list, int pos) { TLinkList *Tlist = NULL; int i = 0; LinkListNode *current = NULL; if (list == NULL || pos < 0) //检查这一步总是遗忘 { return; } Tlist = (TLinkList *)list; current = &(Tlist->header); for (i = 0; i < pos; i++) { current = current->next; } return (current->next); } LinkListNode* LinkList_Delete(LinkList* list, int pos) { TLinkList *Tlist = NULL; int i = 0; LinkListNode *current = NULL; LinkListNode *ret = NULL; if (list == NULL || pos < 0) //检查这一步总是遗忘 { return; } Tlist = (TLinkList *)list; current = &(Tlist->header); for (i = 0; i < pos; i++) { current = current->next; } ret = current->next; current->next = ret->next; Tlist->length--; return NULL; }