1. 程式人生 > 其它 >java大檔案上傳和斷點續傳

java大檔案上傳和斷點續傳

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 // 節點結構
  5 
  6 struct LinkedList
  7 {
  8     // 節點
  9     struct Node
 10     {
 11         int item = 0;
 12         Node *prev;
 13         Node *next;
 14 
 15         // 得到一個新節點
 16         static Node *get(Node *prev, int item, Node *next)
17 { 18 Node *newNode = (Node *)malloc(sizeof(Node)); 19 newNode->item = item; 20 newNode->prev = prev; 21 newNode->next = next; 22 return newNode; 23 } 24 }; 25 26 // 首節點 27 Node *first; 28 //
尾節點 29 Node *last; 30 // 節點個數 31 int size; 32 // LL分配記憶體空間 33 static LinkedList *initial() 34 { 35 LinkedList *l = (LinkedList *)malloc(sizeof(LinkedList)); 36 l->first = NULL; 37 l->last = NULL; 38 l->size = 0; 39 return
l; 40 } 41 42 // 返回指定元素索引處的(非空)節點 43 Node *node(int index) 44 { 45 if (index < (size >> 1)) 46 { 47 Node *x = first; 48 for (int i = 0; i < index; i++) 49 x = x->next; 50 return x; 51 } 52 else 53 { 54 Node *x = last; 55 for (int i = size - 1; i > index; i--) 56 x = x->prev; 57 return x; 58 } 59 } 60 61 // 新增到連結串列第一個 62 void linkFirst(int e) 63 { 64 Node *f = first; 65 Node *newNode = Node::get(NULL, e, f); 66 first = newNode; 67 if (f == NULL) 68 last = newNode; 69 else 70 f->prev = newNode; 71 size++; 72 } 73 74 // 新增到連結串列最後一個 75 void linkLast(int e) 76 { 77 Node *l = last; 78 Node *newNode = Node::get(l, e, NULL); 79 last = newNode; 80 if (l == NULL) 81 first = newNode; 82 else 83 l->next = newNode; 84 size++; 85 } 86 87 // 取消非空節點x的連結 88 int unlink(Node *x) 89 { 90 int element = x->item; 91 92 // 指定節點的前節點 93 Node *prev = x->prev; 94 // 指定節點的後節點 95 Node *next = x->next; 96 97 // 指定節點的前節點為 空 98 if (prev == NULL) 99 // 指定節點的後節點 指向 首節點 100 first = next; 101 else 102 { //指定節點的前節點為 非空 103 // 指定節點的後節點 指向 指定節點的前節點的後節點 104 prev->next = next; 105 x->prev = NULL; 106 } 107 108 if (next == NULL) 109 last = prev; 110 else 111 { 112 next->prev = prev; 113 x->next = NULL; 114 } 115 116 free(x); 117 size--; 118 return element; 119 } 120 121 // 新增到連結串列第一個 122 void addFirst(int e) 123 { 124 linkFirst(e); 125 } 126 127 // 新增到連結串列最後一個 128 void addLast(int e) 129 { 130 linkLast(e); 131 } 132 133 // 新增節點 134 bool add(int e) 135 { 136 linkLast(e); 137 return true; 138 } 139 140 // 引數是否為現有元素的索引 141 bool isElementIndex(int index) 142 { 143 return index >= 0 && index < size; 144 } 145 void checkElementIndex(int index) 146 { 147 if (!isElementIndex(index)) 148 throw; 149 } 150 151 // 刪除列表中指定位置的元素 152 int remove(int index) 153 { 154 checkElementIndex(index); 155 return unlink(node(index)); 156 } 157 158 void print() 159 { 160 Node *node = first; 161 while (node != NULL) 162 { 163 printf("item = %d\n", node->item); 164 node = node->next; 165 } 166 167 printf("列表中元素的個數 = %d\n", size); 168 } 169 }; 170 171 int main() 172 { 173 LinkedList *l = LinkedList::initial(); 174 l->add(233); 175 l->add(234); 176 l->add(235); 177 l->add(236); 178 l->print(); 179 180 l->remove(2); 181 }