线性表-链式存储
1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <malloc.h> 5 using namespace std; 6 7 typedef int ElemType; 8 typedef bool Status; 9 typedef struct LinkList{ 10 ElemType data; 11 struct LinkList * NextNode; 12 size_t Length; 13 } *LNode, LinkList; 14 15 Status InitList(LinkList * list){ 16 list->data = -1; 17 list->NextNode = NULL; 18 list->Length = 0; 19 return true; 20 } 21 Status DestoryList(LinkList * list){ 22 LNode node = list->NextNode; 23 for(;node!=NULL;node=node->NextNode){ 24 free(node); 25 } 26 return true; 27 } 28 Status ListInsert(LinkList * list, ElemType data){ 29 LNode node = (LinkList *)malloc(sizeof(LinkList)); 30 if(node==NULL) return false; 31 node->data = data; 32 node->NextNode = list->NextNode; 33 list->NextNode = node; 34 list->Length++; 35 return true; 36 } 37 LNode GetElem(LinkList list, size_t position){ 38 LNode node = &list; 39 size_t pos_l = 0; 40 while(pos_l<position&&node!=NULL){ 41 pos_l++; 42 node=node->NextNode; 43 } 44 if(node!=NULL) return node; 45 else return false; 46 } 47 Status ListDelete(LinkList * list, size_t position, ElemType * data){ 48 LNode node = NULL; 49 if(position==1) 50 node = list; 51 else 52 node = GetElem(*list, position-1); 53 if(node==NULL||node->NextNode==NULL) return false; 54 LNode TodelPtr = node->NextNode; 55 *data = node->NextNode->data; 56 node->NextNode = node->NextNode->NextNode; 57 list->Length--; 58 free(TodelPtr); 59 return true; 60 } 61 62 size_t Length(LinkList list){ 63 return list.Length; 64 } 65 66 Status Empty(LinkList list){ 67 return (list.Length==0); 68 //return list.NextNode==NULL; 69 } 70 void PrintList(LinkList list){ 71 printf("Linked List(%d): ", Length(list)); 72 LNode node = list.NextNode; 73 while(node != NULL && list.Length > 0){ 74 printf("[%d] ", node->data); 75 node = node->NextNode; 76 } 77 printf("\n"); 78 } 79 void test(){ 80 static int b = 10; 81 } 82 int main() 83 { 84 85 LinkList List; 86 InitList(&List); 87 for(int i=233;i>0;--i) 88 ListInsert(&List, i); 89 PrintList(List); 90 int a; 91 ListDelete(&List, 5, &a); 92 PrintList(List); 93 94 return 0; 95 }