双向链表实现队列的 入队、出队、查找元素
2015-09-24 09:26
387 查看
typedef int DItemType; typedef struct SDoubleList { DItemType iValue; SDoubleList *prev; SDoubleList *next; } DLinkedList,*pDLinkedList; /* 创建双链表 */ DLinkedList *InitDoubleList() { DLinkedList *doublelist = (DLinkedList*)malloc(sizeof(DLinkedList)); if (NULL == doublelist) exit(1); doublelist->prev = NULL; doublelist->next = NULL; return doublelist; } /* 双链表实现队列入队 */ bool DLinkedList_Push(DLinkedList* DL, DItemType value) { if (NULL==DL) { puts("队列不存在,无法插入!\n"); return false; } DLinkedList *temp = (DLinkedList *)malloc(sizeof(DLinkedList)); if (NULL == temp) { puts("插入失败!"); return false; } temp->iValue = value; temp->next = NULL; temp->prev = NULL; DLinkedList *ttemp = DL; while (NULL != ttemp->next) { ttemp = ttemp->next; } ttemp->next = temp; temp->prev = ttemp; return true; } /* 双链表实现队列出队 */ bool DLinkedList_Pop(DLinkedList *DL) { if (NULL==DL || NULL==DL->next) { puts("队列为空,无法出队!"); return false; } DLinkedList *temp = DL->next; DL->next = temp->next; if (NULL==temp->next) { free(temp); return true; } temp->next->prev = DL; free(temp); return true; } /* 遍历队列 */ void VisitDLinkedList(DLinkedList *DL) { if (NULL==DL || NULL == DL->next) { puts("队列为空!"); return; } DLinkedList *temp = DL->next; while (NULL !=temp) { printf("%d ", temp->iValue); temp = temp->next; } printf("\n"); } /* 查找某一元素 */ bool findItem(DLinkedList *DL, DItemType value) { if (NULL==DL || NULL==DL->next) { puts("队列为空,查找失败!"); return false; } DLinkedList *temp = DL->next; while (temp) { if (value==temp->iValue) return true; temp = temp->next; } return false; } void main() { DLinkedList *DL; DL = InitDoubleList(); DLinkedList_Push(DL, 10); DLinkedList_Push(DL, 20); DLinkedList_Push(DL, 30); VisitDLinkedList(DL); DLinkedList_Pop(DL); DLinkedList_Pop(DL); VisitDLinkedList(DL); if (findItem(DL,30)) puts("查找成功!"); else puts("查找失败!"); }
相关文章推荐
- iOS9网络适配教程
- 自己的反汇编引擎
- Https和算法分类
- 2799元的魅族旗舰PRO5,虽“不完美”但已尽量追求极致---ESM
- MySQL++学习日志(一)
- FC22 SSH open
- 同样思路解决不同的问题,集大成者
- JAVA 学习关于 类
- 关于手机框架Framework7使用总结
- C#委托(delegate)简单示例:在两个form之间传递数据
- 黑马程序员——Java语言基础:多线程
- Codeforces Round #321 (Div. 2) 580B Kefa and Company(贪心 + 二分)
- 同样思路解决不同的问题,集大成者
- 【转】一个FAE(AE)的体会和大家交流
- sqlserver 开窗函数分页
- 前端事件系统(一)
- jQuery实现的经典竖向伸缩菜单效果代码
- 自定义控件 仿应用宝 管理界面的标题栏缩放效果
- hdu 4788 Hard Disk Drive
- 魅族的品牌策略