#include#include #include struct 结点 { int 数据; //数据域 struct 结点 *下一个; //指针域 }; struct 结点 *创建链表(); struct 结点 *创建结点(int 数据); void 遍历链表(struct 结点 *头结点); struct 结点 *查找结点(struct 结点 *头结点, unsigned int 序号); bool 删除结点(struct 结点 *头结点, unsigned int 序号); bool 插入结点(struct 结点 *头结点, struct 结点 *被插入的结点, unsigned int 序号); int 取链表结点数(struct 结点 *头结点); void 追加结点(struct 结点 *头结点, struct 结点 *被追加的结点); void 释放链表(struct 结点 *头结点); int main(void) { struct 结点 *头指针; 头指针 = 创建链表(); 插入结点(头指针, 创建结点(123), 1); 插入结点(头指针, 创建结点(456), 2); 插入结点(头指针, 创建结点(789), 3); 插入结点(头指针, 创建结点(345), 4); printf("第一次输出:n"); 遍历链表(头指针); 删除结点(头指针, 2); printf("第二次输出:n"); 遍历链表(头指针); 插入结点(头指针, 创建结点(999), 3); printf("第三次输出:n"); 遍历链表(头指针); int 长度 = 取链表结点数(头指针); printf("链表长度为:%dn", 长度); 追加结点(头指针, 创建结点(135790)); printf("第四次输出:n"); 遍历链表(头指针); 释放链表(头指针); return 0; } struct 结点 *创建链表() { struct 结点 *头结点 = (struct 结点 *)malloc(sizeof(struct 结点)); 头结点->下一个 = NULL; return 头结点; } struct 结点 *创建结点(int 数据) { struct 结点 *结点 = (struct 结点 *)malloc(sizeof(struct 结点)); 结点->数据 = 数据; 结点->下一个 = NULL; return 结点; } void 遍历链表(struct 结点 *头结点) { struct 结点 *临时 = 头结点->下一个; for(int 计数 = 1; 临时; 计数++) { printf("第%d个结点的数据域为:%dn", 计数, 临时->数据); 临时 = 临时->下一个; } } struct 结点 *查找结点(struct 结点 *头结点, unsigned int 序号) { struct 结点 *临时 = 头结点; for(unsigned int 计数 = 0; 计数 < 序号 && (临时 = 临时->下一个); 计数++) ; return 临时; } bool 删除结点(struct 结点 *头结点, unsigned int 序号) { struct 结点 *临时 = 头结点, *被删除结点; for(unsigned int 计数 = 0; 计数 < 序号 - 1 && (临时 = 临时->下一个); 计数++) ; if(临时 == NULL) return false; else { if(临时->下一个 == NULL) return false; else { 被删除结点 = 临时->下一个; 临时->下一个 = 临时->下一个->下一个; free(被删除结点); return true; } } } bool 插入结点(struct 结点 *头结点, struct 结点 *被插入的结点, unsigned int 序号) { struct 结点 *临时 = 头结点, *临时位置; for(unsigned int 计数 = 0; 计数 < 序号 - 1 && (临时 = 临时->下一个); 计数++) ; if(临时 == NULL) return false; else { 临时位置 = 临时->下一个; 临时->下一个 = 被插入的结点; 被插入的结点->下一个 = 临时位置; return true; } } int 取链表结点数(struct 结点 *头结点) { struct 结点 *临时 = 头结点; unsigned int 计数; for(计数 = 0; (临时 = 临时->下一个); 计数++) ; return 计数; } void 追加结点(struct 结点 *头结点, struct 结点 *被追加的结点) { struct 结点 *临时 = 头结点; while(临时->下一个) 临时 = 临时->下一个; 临时->下一个 = 被追加的结点; } void 释放链表(struct 结点 *头结点) { struct 结点 *临时 = 头结点->下一个, *交换; while(临时) { 交换 = 临时; 临时 = 临时->下一个; free(交换); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)