线性表的链式存储

来源:互联网 发布:java list集合排序 编辑:程序博客网 时间:2024/04/30 07:21

1

//LinkList.h#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);//³É¹¦·µ»Ø£ºLength  ʧ°Ü·µ»Ø£º-1 int LinkList_Length(LinkList* list);//³É¹¦·µ»Ø£º1  ʧ°Ü·µ»Ø£º0 int LinkList_Insert(LinkList* list,LinkListNode* node,int pos);//³É¹¦·µ»Ø£ºnode  ʧ°Ü·µ»Ø£ºNULLLinkListNode* LinkList_Get(LinkList* list,int pos);//³É¹¦·µ»Ø£ºnode  ʧ°Ü·µ»Ø£ºNULLLinkListNode* LinkList_Delete(LinkList* list,int pos);#endif

//LinkList.c#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->length = 0;ret->header.next = NULL;}return ret;}void LinkList_Destroy(LinkList* list){free(list);}void LinkList_Clear(LinkList* list){TLinkList* sList = (TLinkList*)list;if(sList != NULL){sList->length = 0;sList->header.next = NULL;}}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 ret = (sList != NULL);int i = 0;ret = ret && (pos >= 0) && (node != NULL);//ret = ret && (pos >= 0) &&(pos < sList->length)&& (node != NULL);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((sList != NULL)&&(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;}

//main.c#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 */struct Value{LinkListNode header;int v;};int main(int argc, char *argv[]) {LinkList* list = LinkList_Create();struct Value v1;struct Value v2;struct Value v3;struct Value v4;int index = 0;v1.v = 1;v2.v = 2;v3.v = 3;v4.v = 4;LinkList_Insert(list,(LinkListNode*)&v1,LinkList_Length(list));LinkList_Insert(list,(LinkListNode*)&v2,LinkList_Length(list));LinkList_Insert(list,(LinkListNode*)&v3,LinkList_Length(list));LinkList_Insert(list,(LinkListNode*)&v4,LinkList_Length(list));for(index = 0;index < LinkList_Length(list);index++){struct Value* pv = (struct Value*)LinkList_Get(list,index);printf("%d\n",pv->v);}while(LinkList_Length(list) > 0){struct Value* pv = (struct Value*)LinkList_Delete(list,0);printf("%d\n",pv->v);}LinkList_Destroy(list); return 0;}










1


1 0