链表模板
truct ListNode {int val;struct ListNode *next;
};
typedef struct MyLinkedList_t {int val;struct MyLinkedList_t *next;
} MyLinkedList;
void myLinkedListAddAtIndex(MyLinkedList *obj, int index, int val);
MyLinkedList *myLinkedListCreate()
{MyLinkedList *dummyHead = (MyLinkedList *)malloc(sizeof(MyLinkedList));if (dummyHead == NULL) {return NULL;}dummyHead->next = NULL;dummyHead->val = 0; return dummyHead;
}
int myLinkedListGet(MyLinkedList *obj, int index)
{int cnt = 0;MyLinkedList *tmp = obj->next;while (tmp != NULL) {if (index == cnt) {return tmp->val;}tmp = tmp->next;cnt++;}return -1;
}
void myLinkedListAddAtHead(MyLinkedList *obj, int val)
{myLinkedListAddAtIndex(obj, 0, val);
}
void myLinkedListAddAtTail(MyLinkedList *obj, int val)
{myLinkedListAddAtIndex(obj, obj->val, val);
}
void myLinkedListAddAtIndex(MyLinkedList *obj, int index, int val)
{int cnt = 0;if (index > obj->val) {return;}MyLinkedList *tmp = obj;MyLinkedList *newNode = (MyLinkedList *)malloc(sizeof(MyLinkedList));newNode->val = val;while (tmp != NULL) {if (cnt == index) {break;}tmp = tmp->next;cnt++;}newNode->next = tmp->next;tmp->next = newNode;obj->val++; return;
}
void myLinkedListDeleteAtIndex(MyLinkedList *obj, int index)
{MyLinkedList *node = NULL;MyLinkedList *tmp = obj;int cnt = 0;if (index >= obj->val) {return; }while (tmp != NULL) {if (cnt == index) {break;}cnt++;tmp = tmp->next;}if (tmp->next == NULL) { return;}obj->val--;node = tmp->next; tmp->next = node->next; free(node);
}
void myLinkedListFree(MyLinkedList *obj) {MyLinkedList *tmp = obj;MyLinkedList *freeNode;while (tmp != NULL) { freeNode = tmp;tmp = tmp->next;freeNode->next = NULL;freeNode->val = 0;free(freeNode);}
}
int main()
{int ret = 0;MyLinkedList* obj = myLinkedListCreate();myLinkedListAddAtHead(obj, 1);myLinkedListAddAtTail(obj, 3);myLinkedListAddAtIndex(obj, 1, 2);ret = myLinkedListGet(obj, 1);myLinkedListDeleteAtIndex(obj, 1);ret = myLinkedListGet(obj, 1);ret = myLinkedListGet(obj, 3);myLinkedListDeleteAtIndex(obj, 3);myLinkedListDeleteAtIndex(obj, 3);ret = myLinkedListGet(obj, 0);myLinkedListDeleteAtIndex(obj, 0);ret = myLinkedListGet(obj, 0);return 0;
}
队列实现模板
#define MAX_NUN 1024
typedef struct {int head;int tail;int size; int data[MAX_NUN];
} Queue_t;
Queue_t *QueueCreate(int size)
{Queue_t *queue = (Queue_t *)malloc(sizeof(Queue_t));queue->tail = 0;queue->head = 0;queue->size = size;memset(queue->data, 0, sizeof(int) * (MAX_NUN));return queue;
}
bool QueuePush(Queue_t *queue, int value)
{if (QueueIsFull(queue)) {return false;}queue->data[queue->tail] = value; queue->tail = (queue->tail + 1) % queue->size; return true;
}
bool QueuePop(Queue_t *queue, int *value)
{if (QueueIsEmpty(queue)) {return false;}*value = queue->data[queue->head];queue->head = (queue->head + 1) % queue->size;return true;
}
bool QueueIsEmpty(Queue_t *queue)
{return (queue->head == queue->tail);
}
bool QueueIsFull(Queue_t *queue)
{return (((queue->tail + 1) % queue->size) == queue->head);
}
int QueueFront(Queue_t *queue)
{if (QueueIsEmpty(queue)) {return -1;}return queue->data[queue->head];
}
int QueueTail(Queue_t *queue)
{if (QueueIsEmpty(queue)) {return -1;}return queue->data[(queue->tail - 1 + queue->size) % queue->size];
}
void QueueFree(Queue_t *queue)
{free(queue);queue = NULL;
}