B - 链表基本操作

B - 链表基本操作
Time Limit:1000MS    Memory Limit:131072KB    64bit IO Format:%lld & %llu

Description

这个链表共有五种操作

Input

loc 为正数,x为一整型数, 
"insert loc x"表示将整数x插入链表作为链表第loc个数据 
"erase loc"表示删除链表的第loc个数据(测试数据保证loc小于链表的结点总数) 
"output"表示输出链表所有的数据,数据间用空格隔开 
"find x"表示在链表中查找值为x的数据,若查找到则输出"hava found",没找到输出"not found"
"end"表示程序结束

Output

按要求输出

Sample Input

insert 1 2insert 2 6insert 3 5find 6outputerase 2find 6outputinsert 3 10outputinsert 2 11outputend

Sample Output

have found 2 6 5 not found 2 5 2 5 10 2 11 5 10

// File Name: 链表的基本操作.cpp
// Author: rudolf
// Created Time: 2013年03月12日 星期二 16时18分17秒

#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>

using namespace std;
typedef int datatype;
typedef struct slonode
{
	int data;
	struct slonode *next;
}slonode,*linklist;
////////////
linklist creatlist(linklist head)
{
	head=(linklist)malloc(sizeof(slonode));
	head->next=NULL;
	return head;
}
/////////////////////////
void insertlist(linklist head,int i,datatype x)
{
	linklist q,s;
	q=head;
	int j=0;
	while(q->next!=NULL&&j<i-1)
	{
		q=q->next;
		j++;
	}
	s=(linklist)malloc(sizeof(slonode));
	s->data=x;
	s->next=q->next;
	q->next=s;
}
////////////
linklist deletelist(linklist head,int i)
{
	linklist q,p;
	q=head;
	int j=0;
	while(q->next!=NULL&&j<i-1)
	{
		q=q->next;
		j++;
	}
	p=q->next;
	q->next=p->next;
	free(p);
}
///////////////
void print(linklist head)
{
	linklist q;
	q=head;
	while(q->next!=NULL)
	{
		cout<<q->next->data<<' ';
		q=q->next;
	}
	//cout<<q->next->data;
cout<<endl;
}
/////////////////
void getlist(linklist head,datatype x)
{
	linklist q;
	q=head;
	int flag=0;
	while(q->next!=NULL)
	{
		if(q->next->data==x)
		{
			break;
		//	flag=1;
		//	cout<<"hava found"<<' ';
		}
		q=q->next;
	//	flag=1;
	//		cout<<"not found"<<endl;
	}
	if(!q->next)
		cout<<"not found "<<endl;
	else
		cout<<"have found "<<endl;
}
////////////
int main()
{
	int loc,x;
	linklist head,p,q;
	char str[100];
	head=(linklist)malloc(sizeof(slonode));
	head=creatlist(head);
	while(scanf("%s",str)!=EOF)
	{
		if(!strcmp(str,"insert"))
		{
			cin>>loc>>x;
			insertlist(head,loc,x);
		//	print(head);
		}
		if(!strcmp(str,"erase"))
		{
			cin>>loc;
			deletelist(head,loc);
		}
		if(!strcmp(str,"output"))
		{
			print(head);
		}
		if(!strcmp(str,"find"))
		{
			cin>>x;
			getlist(head,x);
		}
		if(!strcmp(str,"end"))
		{
			break;
		}
	}
return 0;
}


posted @ 2013-04-12 17:15  bo_jwolf  阅读(194)  评论(0编辑  收藏  举报