线性表——带头结点单链表的实现
2012-09-27 14:14
405 查看
/* 带头结点的单链表 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; }
相关文章推荐
- 线性表——带头结点单链表的实现
- 试编写在无头结点的单链表上实现线性表的插入操作的算法,并和带头结点的单链表上的插入操作的算法进行比较
- 带头结点的链表实现线性表的基本操作
- 线性表的链式存储结构_单向链表[带头结点]_C#实现
- 数据结构(5)线性表之链表C++实现带头结点的单链表合并
- 带头结点单链表的各种各种运算(C++模板类实现)
- 带头结点的单链表实现(C++)
- 线性表和带头结点的双向循环链表
- 计算带头结点单链表的长度 计算单链表的长度,实现单链表的打印
- 数据结构实验-用C++实现带头结点的循环链表
- 数据结构模版----单链表SimpleLinkList[不带头结点&&伪OO](C语言实现)
- 计算带头结点单链表的长度 计算单链表的长度,实现单链表的打印
- C语言实现单链表-不带头结点
- C实现头插法和尾插法来构建非循环双链表(不带头结点)
- C++实现带头结点单链表
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- c语言实现--不带头结点的单链表操作
- 自己实现集合框架(七):带头结点单链表的实现
- !-- 不带头结点不带环的单链表相关操作实现 --!
- 带头结点链表的实现