双向循环链表 函数的实现
来源:互联网 发布:js将list转换为数组 编辑:程序博客网 时间:2024/06/09 17:47
#include"list.h"void InitList(List *list){Node *s=(Node *)malloc(sizeof(Node));assert(s!=NULL); list->first=list->last=s;list->first->prev=list->last;list->last->next=list->first;list->size=0;}void push_back(List *list, ElemType x){ Node *s=(Node *)malloc(sizeof(Node));assert(s!=NULL);s->data=x;list->last->next=s;s->prev=list->last;list->last=s; list->first->prev=list->last;list->last->next=list->first;list->size++;}void push_front(List *list, ElemType x){ Node *s = (Node *)malloc(sizeof(Node));assert(s != NULL);s->data = x;s->prev=list->first;s->next=list->first->next;list->first=s;s->next->prev=s; if(list->size==0)list->last=s;list->size++;}void pop_back(List *list){if(list->size==0)cout<<"表空,不能删除!"<<endl;list->last=list->last->prev;free(list->first->prev);if(list->size==1)list->last=list->first;list->first->prev=list->last;list->last->next=list->first;list->size--;}void pop_front(List *list){ if(list->size==0)cout<<"表空,不能删除!"<<endl;Node *p=list->first->next;list->first->next=p->next;p->next->prev=list->first;free(p);if(list->size==1){list->last=list->first;list->last->next=list->first;list->first->prev=list->last;}list->size--;}void show_list(List *list){Node *p = list->first->next;while(p != list->first){cout<<p->data<<"-->";p = p->next;}cout<<"Over!"<<endl;}Node* find(List *list, ElemType key){Node *p=list->first->next;while(p!=list->first&&p->data!=key)p=p->next;if(p!=list->first)return p;return NULL;}bool delete_val(List *list, ElemType key){Node *q=find(list,key);if(q==NULL)return false;if(q==list->last){list->last=q->prev;}q->prev->next=q->next;q->next->prev=q->prev;free(q);list->size--;return true;}bool insert_val(List *list, ElemType x){Node *p = find(list,x);if(p != NULL)return false;Node *s = (Node *)malloc(sizeof(Node));assert(s != NULL);s->data = x;p = list->first;while(p->next != list->first){if(x<p->next->data)break;//如果x小于第一个,则跳出循环执行下面操作p = p->next;}s->next = p->next;p->next->prev = s;s->prev = p;p->next = s;if(p == list->last)//如果x大于最后一个,将list->last指向s即可{list->last = s;}list->size++;return true;}bool resver(List *list)//从第二个节点开始按照顺序头插{Node *p = list->first->next;Node *q = p->next;p->next = list->first;list->first->prev = p;list->last = p;while(p!=list->first){p = q;q = q->next;p->next = list->first->next;p->next->prev = p;p->prev = list->first;list->first->next = p;}return true;}
0 0
- 双向循环链表 函数的实现
- 双向循环链表的实现
- 双向循环链表的c++ 实现
- Linux双向循环链表的实现
- 双向循环链表的实现
- 双向循环链表的C++实现
- Linux双向循环链表的实现
- 双向循环链表操作的实现
- Linux双向循环链表的实现
- Linux双向循环链表的实现
- 双向循环链表操作的实现
- Linux双向循环链表的实现
- 双向循环链表的实现
- 双向循环链表的实现
- 循环双向链表的实现
- 双向循环链表的实现
- 双向循环链表的简单实现
- Linux双向循环链表的实现
- day12/WaitNotifyThread.java
- 数据结构:二叉搜索树
- 链表 Remove Duplicates from Sorted List II
- HDU 4586 Play the Dice(规律+推导)
- day13/Jibenshujuleixing.java
- 双向循环链表 函数的实现
- JavaScript扩展String的方法
- zoj-2563(1×3铺地砖)
- day13/MyIndexOfString.java
- LintCode 两个字符串是变位词
- 【cocos2dx】添加简单的按钮 MenuItemImage
- day13/MyReverseString.java
- day13/MySubstring.java
- day13/MyTrim.java