链表相关程序练习
来源:互联网 发布:淘宝买被子好吗 编辑:程序博客网 时间:2024/06/05 07:59
源程序
#include <stdio.h>#include <stdlib.h>#define T 1#define F -1typedef int Type;typedef int Status;struct Node{ Type value; struct Node *next;};Status init(struct Node **h);Status insert_head(struct Node *head, Type value);void print(struct Node *head);Status insert_tail(struct Node *head, Type value);int lenth(struct Node *head);Status insert_index(struct Node *head, Type value, int index);Status delete_index(struct Node *head, int index);Status delete_value(struct Node *head, Type value);Status update_index(struct Node *head, int index, Type value);void update_value(struct Node *head, Type old_value, Type new_value);Status query_index(struct Node *head, int index);void query_value(struct Node *head, Type value);int main(){ int ret = 0; int i; struct Node *head; ret = init(&head); printf(ret ? "initialize successfully\n" : "initialize failed\n"); for (i = 0; i < 10; i++) { insert_head(head, i); } print(head); for (i = 0; i < 10; i++) { insert_tail(head, i); } print(head); printf("%d\n", lenth(head)); insert_index(head, 99, 19); print(head); delete_index(head, 19); print(head); delete_value(head, 2); print(head); update_index(head, 3, -1); update_value(head, 6, 66); print(head); query_index(head, 3); query_value(head, 7); return 0;}Status init(struct Node **h){ struct Node *newnode = (struct Node *)malloc(sizeof(struct Node)); if (NULL == newnode) { return F; } newnode->value = 0; newnode->next = NULL; *h = newnode; return T;}Status insert_head(struct Node *head, Type value){ struct Node *newnode = (struct Node *)malloc(sizeof(struct Node)); if (NULL == newnode) { return F; } newnode->value = value; newnode->next = head->next; head->next = newnode; return T;}Status insert_tail(struct Node *head, Type value){ struct Node *newnode = (struct Node *)malloc(sizeof(struct Node)); if (NULL == newnode) { return F; } newnode->value = value; newnode->next = NULL; while (head->next != NULL) { head = head->next; } head->next = newnode; return T;}Status insert_index(struct Node *head, Type value, int index){ if (0 == index || index > lenth(head)) { printf("out of range\n"); return F; } struct Node *newnode = (struct Node *)malloc(sizeof(struct Node)); if (NULL == newnode) { return F; } int i; for (i = 0; i < index; i++) { head = head->next; } newnode->value = value; newnode->next = head->next; head->next = newnode; return T;}Status delete_index(struct Node *head, int index){ if (0 == index || index > lenth(head)) { printf("out of range\n"); return F; } int i; for (i = 0; i < index; i++) { head = head->next; } struct Node *tmp = head->next->next; free(head->next); head->next = tmp; return T;}Status delete_value(struct Node *head, Type value){ int i, len; len = lenth(head); for(i = 0; i < len; i++) {// printf("i = %d value = %d\n", i, head->next->value); if (head->next->value == value) { struct Node *tmp = head->next->next; free(head->next); head->next = tmp; } else { head = head->next; } } return T;}Status update_index(struct Node *head, int index, Type value){ if (index < 0 || index > lenth(head)) { printf("out of range\n"); return F; } int i; for (i = 0; i <= index; i++) { head = head->next; } head->value = value; return T;}void update_value(struct Node *head, Type old_value, Type new_value){ while (head->next != NULL) { if (head->next->value == old_value) { head->next->value = new_value; } head = head->next; }}Status query_index(struct Node *head, int index){ if (index < 0 || index > lenth(head)) { printf("out of range\n"); return F; } int i; for (i = 0; i <= index; i++) { head = head->next; } printf("index = %d value = %d\n", index, head->value); return T;}void query_value(struct Node *head, Type value){ int count = 0; int index = 0; while (head->next != NULL) { if (head->next->value == value) { count++; printf("find %d: %d\n", value, index); } head = head->next; index++; } if (0 == count) { printf("not found\n"); }}void print(struct Node *head){ while (NULL != head->next) { printf("%d ", head->next->value); head = head->next; } printf("\n");}int lenth(struct Node *head){ int count = 0; while (NULL != head->next) { count++; head = head->next; } return count;}
运行结果
阅读全文
0 0
- 链表相关程序练习
- 文件相关的练习程序
- 链表相关程序
- 链表相关程序
- 简单的链表相关练习
- OpenCV学习系列:标定相关程序练习
- Java程序练习-链表二合一
- 线性表相关编程题练习
- 一个用于练习链表的“跳马”程序
- 程序练习
- 程序练习
- 程序练习
- 程序练习
- 与程序相关的表
- LeetCode 分类练习(5)—— 链表相关习题(1)
- 指针相关练习
- [编程练习]字符串相关
- struts2的相关练习
- TypeScript笔记
- java实现验证码类生成中文验证码
- Mac pro使用的那些坑(二)git的安装和git终端打开
- java登录验证码实现代码
- 冒泡排序(C语言实现)
- 链表相关程序练习
- java开发微信公众号支付
- 机器学习笔记3-id3算法决策树程序解析
- 编译错误总结
- 记忆化搜索之一: hihoCoder 1491 : Monster Killing
- Mybatis多表关联查询的实现(DEMO)
- java的局部类和匿名类
- Java网络爬虫(八)--使用多线程进行百度图片的抓取
- Unity/Animation -- 创建Animation Clip