快要放假了,实在是待不住了,论文也看不下去,也没啥其他的事做,就写写常用的数据结构吧,正好下个学期就要找工作了,也是方便以后自己使用这些数据结构,好吧,这里实现的数据结构没有太多的错误控制,需要自己去判断什么不应该为空,第一篇文章贴出最经典的单链表的实现:
头文件:
/* * dlut_list.h * * Created on: 2014年1月13日 * Author: DLUTBruceZhang */ #ifndef DLUT_LIST_H_ #define DLUT_LIST_H_ typedef int need; typedef struct _list { need data; struct _list *next; }list; list * dlut_list_create(void); void dlut_list_insert_to_head(list *, need); void dlut_list_insert_to_tail(list *, need); void dlut_list_delete_the_head(list *); void dlut_list_delete_the_tail(list *); void dlut_list_delete_the_data(list *, need); need dlut_list_get_the_head(list *); need dlut_list_get_the_tail(list *); void dlut_list_print_the_list(list *); void dlut_list_delete_the_list(list *); #endif /* DLUT_LIST_H_ */
C文件:
/* * dlut_list.c * * Created on: 2014年1月13日 * Author: DLUTBruceZhang */ #include <stdio.h> #include <stdlib.h> #include "dlut_list.h" list *dlut_list_create() { list *head; head = (list *)malloc(sizeof(list)); if (!head) return NULL; head -> data = 0; head -> next = NULL; return head; } void dlut_list_insert_to_head(list *head, need data) { list *new_node; new_node = (list *)malloc(sizeof(list)); if (!new_node) return; new_node -> next = head -> next; new_node -> data = data; head -> next = new_node; head -> data += 1; return; } void dlut_list_insert_to_tail(list *head, need data) { list *_head = head; list *new_node; new_node = (list *)malloc(sizeof(list)); if (!new_node) return; while (_head -> next != NULL) _head = _head -> next; new_node -> data = data; new_node -> next = NULL; _head -> next = new_node; head -> data += 1; return; } void dlut_list_delete_the_head(list *head) { if (head -> next == NULL) return; list *old_node = head -> next; head -> next = head -> next -> next; head -> data -= 1; free(old_node); return; } void dlut_list_delete_the_tail(list *head) { if (head -> next == NULL) return; list *_head = head; while (_head -> next -> next != NULL) _head = _head -> next; list *old_node = _head -> next; _head -> next = NULL; head -> data -= 1; free(old_node); return; } void dlut_list_delete_the_data(list *head, need data) { if (head -> next == NULL) return; list *_head = head; while (_head -> next != NULL && _head -> next -> data != data) _head = _head -> next; if (!_head -> next) return; list *old_node = _head -> next; _head -> next = _head -> next -> next; head -> data -= 1; free(old_node); return; } need dlut_list_get_the_head(list *head) { return head -> next ? head -> next -> data : -1; } need dlut_list_get_the_tail(list *head) { if (head -> next == NULL) return -1; while (head -> next != NULL) head = head -> next; return head -> data; } void dlut_list_print_the_list(list *head) { while (head -> next != NULL) { printf("%d ", head -> next -> data); head = head -> next; } printf("\n"); return; } void dlut_list_delete_the_list(list *head) { while (head -> next != NULL) { dlut_list_delete_the_head(head); } free(head); return; }
原文:http://blog.csdn.net/dlutbrucezhang/article/details/18225473