一个双链表的C实现
来源:互联网 发布:独立游戏开发入门 知乎 编辑:程序博客网 时间:2024/06/09 16:02
最近想学习下数据结构方面的知识,于是上网找了些双链表的实现,资料很多,但是,结果发现基本是不能用的,有些甚至编译不过去
后来,我就在一个别人写的基础上,重新修改了一遍,自己测试是好的
linux + vim + gcc
#include <stdio.h>#include <stdlib.h>typedef struct MyNode { int data; struct MyNode *left; struct MyNode *right;} MyNode, *pmyNode;pmyNode CreateNode(int data){ pmyNode pnode = (pmyNode)malloc(sizeof(MyNode)); pnode->data = data; pnode->left = pnode->right = pnode; return pnode;}pmyNode CreateList(int head){ pmyNode pnode = (pmyNode)malloc(sizeof(MyNode)); pnode->data = head; pnode->left = pnode->right = pnode; return pnode;}pmyNode InsertNode(pmyNode node, int data){ pmyNode pnode = CreateNode(data); pmyNode ptmp = node->left; node->left->right = pnode; pnode->right = node; node->left = pnode; pnode->left = ptmp; return node;}pmyNode FindNode(pmyNode node, int data){ pmyNode pnode = node->right; while (pnode != node) { if(pnode->data == data) return pnode; pnode = pnode->right; } return NULL;}pmyNode DelectNode(pmyNode node, int data){ pmyNode ptmp; pmyNode pnode = FindNode(node, data); if(NULL == pnode) return NULL; ptmp = pnode->left; ptmp->right = pnode->right; pnode->right->left = ptmp; free(pnode); return node;}int GetLenght(pmyNode node){ int nCount = 0; pmyNode pnode = node->right; while (pnode != node) { nCount++; pnode = pnode->right; } return nCount;}void PrintList(pmyNode node){ pmyNode pnode; if(NULL == node) return; pnode = node->right; while (pnode != node && pnode != NULL) { printf("%d ", pnode->data); pnode = pnode->right; } printf("\n");}void ReverPrintList(pmyNode node){ pmyNode pnode; if(NULL == node) return; pnode = node->left; while (pnode != node) { printf("%d ", pnode->data); pnode = pnode->left; } printf("\n");}void DelectList(pmyNode node){ if(NULL == node) return; pmyNode pnode = node->right; pmyNode ptmp; while (pnode != node) { ptmp = pnode; pnode = pnode->right; free(ptmp); } free(node);}void ClearList(pmyNode node){ if(NULL == node) return; pmyNode pnode = node->right; pmyNode ptmp; while (pnode != node) { ptmp = pnode; pnode = pnode->right; free(ptmp); } node->right = node->left = node;}int main(void){ int choose; int data; int flag = 1; pmyNode pnode; pmyNode list = CreateList(0); while (flag) { printf("======== Main Menu ========\n"); printf("1 InsertNode\n"); printf("2 DelectNode\n"); printf("3 FindNode\n"); printf("4 GetLenght\n"); printf("5 PrintList\n"); printf("6 ReverPrintList\n"); printf("7 ClearList\n"); printf("0 quit\n\n"); printf("===========================\n"); scanf("%d", &choose); switch(choose) { case 1: printf("Input the data to insert: "); scanf("%d", &data); list = InsertNode(list, data); break; case 2: printf("Input the data to delete: "); scanf("%d", &data); DelectNode(list, data); break; case 3: printf("Input the data to find: "); scanf("%d", &data); pnode = FindNode(list, data); if(NULL != pnode) printf("Find succeed..!!\n"); else printf("Find failed..!!\n"); break; case 4: printf("The list's length is %d", GetLenght(list)); break; case 5: PrintList(list); break; case 6: ReverPrintList(list); break; case 7: ClearList(list); break; case 0: DelectList(list); flag = 0; break; default: printf("Please select 0-7 numbers..!!\n"); break; } printf("\n"); } return 0;}
- 一个双链表的C实现
- 一个双链表的C实现
- 一个算法的C实现
- 红黑树的一个C实现
- C-一个栈的实现
- red_black_tree的一个实现(c/c++)
- C语言实现一个双链表
- C语言 实现一个双链表
- 一个简单的http_server的c实现
- c实现的一个经典链表
- 用C实现的一个cstring
- 一个简单的HashMap C语言实现
- [C#]StringWriter实现的一个功能
- 一个urlencode/urldecode的C实现
- C语言一个库函数的实现
- C语言一个单链表的实现
- 一个简单的HashMap C语言实现
- 一个用C实现的内存分配
- dispatch_async 与 dispatch_get_global_queue (多线程)
- web前端优化之GZIP组件缓存
- ubuntu 如何用命令行进行升级
- shell脚本实现每秒执行一次任务 rsync命令使用
- eclipse.ini中的参数
- 一个双链表的C实现
- Mysql 常用操作
- ActionScript3语法 ----(1)
- Android英文名词解释大全(持续更新中......)
- 信息系统资源管理
- AudioManager音量控制
- Android之App Widgets开发初步
- 释放SQL Server占用的内存
- performSelectorOnMainThread (线程)