线性表——带头结点单链表的实现

来源:互联网 发布:apache 和nginx模型 编辑:程序博客网 时间:2024/05/18 12:28
/*带头结点的单链表vs2010 调试*/#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef struct LinkNode{int num;struct LinkNode *next;};//获得链表长度int get_length(struct LinkNode *L){struct LinkNode *trace = L;int length = 0;if(trace == NULL){return 0;}while(trace->next != NULL){length++;trace = trace->next;}return length;}/*插入节点向pos的位置插入值为num的节点*/int insert_LinkList(struct LinkNode *L, int num, int pos){struct LinkNode *tmp_node;struct LinkNode *trace = L;if(pos < 0 || pos > get_length(L)){return 0;}tmp_node = (struct LinkNode *)malloc(sizeof(struct LinkNode));tmp_node->num = num;tmp_node->next = NULL;while(pos != 0){trace = trace->next;pos--;}tmp_node->next = trace->next;trace->next = tmp_node;return 1;}/*删除pos位置的结点链表*/int delete_LinkList(struct LinkNode *L, int pos){struct LinkNode *trace = L;struct LinkNode *p = NULL;if(pos <= 0 || pos > get_length(L)){return 0;}while(--pos != 0){trace = trace->next;}p = trace->next;trace->next = p->next;free(p);return 1;}/*搜索值为num的节点在链表中的位置返回值:-1 搜索失败; >-1 num的位置*/int search_LinkList(struct LinkNode *L, int num){int pos = 1;struct LinkNode *head = L->next;while(head != NULL){if(head->num == num){break;}if((head = head->next) == NULL){return -1;}pos++;}return pos;}/*更新pos位置的节点值为num,原值存入num里*/int update_LinkList(struct LinkNode *L, int pos, int *num){int tmp = 0;struct LinkNode *trace = L;if(pos <= 0 || pos > get_length(L)){return 0;}while(pos-- > 0){trace = trace->next;}tmp = trace->num;trace->num = *num;*num = tmp;return 1;}/*打印链表元素*/void print_LinkList(struct LinkNode *L){struct LinkNode *trace = L->next;while(trace != NULL){printf("%d ", trace->num);trace = trace->next;}printf("\n");}/*初始化链表*/struct LinkNode *init_link_list(){struct LinkNode *tmp_list_node = (struct LinkNode *)malloc(sizeof(struct LinkNode));tmp_list_node->next = NULL;return tmp_list_node;}int main(int argc, char *argv[]){int num = 12;struct LinkNode *La = NULL;La = init_link_list();insert_LinkList(La, 7, 0);insert_LinkList(La, 8, 0);insert_LinkList(La, 9, 0);insert_LinkList(La, 6, 1);insert_LinkList(La, 5, 3);print_LinkList(La);delete_LinkList(La, 2);print_LinkList(La);printf("%d\n",search_LinkList(La, 5));update_LinkList(La, 3, &num);print_LinkList(La);return 0;}

0 0