#include <iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; struct Node { int key; Node *pre,*next; }; Node* nil;//头节点不含元素 void init() { nil=(Node*)malloc(sizeof(Node)); nil->next=nil; nil->pre=nil; } void insert(int key)//在nil后添加元素 { Node *x=(Node*)malloc(sizeof(Node)); x->key=key; //x->next=nil; x->next=nil->next; nil->next->pre=x; nil->next=x; x->pre=nil; } Node* listsearch(int key) { Node* cur=nil->next; while(cur!=nil&&cur->key!=key) { cur=cur->next; } return cur; } void deletenode(Node* t) { if(t==nil) { return; } else { t->pre->next=t->next; t->next->pre=t->pre; free(t); } } void deletefirst() { deletenode(nil->next); } void deletelast() { deletenode(nil->pre); } void deletekey(int key) { deletenode(listsearch(key)); } void visit() { Node *cur=nil->next; while(cur!=nil) { cout<<cur->key<<" "; cur=cur->next; } } int main(void) { int key; char ch; init(); cout<<"input ch"<<endl; while(cin>>ch) { if(ch=='i') { cout<<"intput key"<<endl; cin>>key; insert(key); } else if(ch=='s') { cout<<"intput key"<<endl; cin>>key; Node* node=listsearch(key); if(node==nil) { cout<<"no data"<<endl; } else { cout<<"YES"<<endl; } } else if(ch=='d') { cout<<"intput key"<<endl; cin>>key; deletekey(key); } else if(ch=='f') { deletefirst(); } else if(ch=='l') { deletelast(); } else if(ch=='K') { cout<<"intput key"<<endl; cin>>key; deletekey(key); } else if(ch=='v') { visit(); } else { ; } cout<<"input ch"<<endl; } }
双向链表的实现(c语言)
猜你喜欢
转载自blog.csdn.net/HJ13547816754/article/details/80569192
今日推荐
周排行