双向链表的实现(c语言)

#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;
	}
}

猜你喜欢

转载自blog.csdn.net/HJ13547816754/article/details/80569192