#include<iostream>
using namespace std;
struct node{ //定義節點//
int data;
node *next;
};
class sllist{ //單鏈表類的定義//
private:
node *head;
public:
sllist();
node *creat_list(); //創建鏈表的函數//
void print_list(); //輸出鏈表//
void find(); //存取//
void search(); //查找//
node * insert(); //插入//
node * del(); //刪除//
};//構造函數//
sllist::sllist(){
cout<<"警告:如果你輸入的數據超過鏈表的範圍程序會終止!"<<endl;
head=new node;
}//創建鏈表//
node * sllist::creat_list(){
int n=1;
node *p1,*p2;
p1=new node;
cout<<"請輸入第1個數據:"<<endl;
cin>>p1->data;
head->next=p1;
while(p1->data!=0){
n++;
p2=p1;
p1=new node;
p2->next=p1;
cout<<"請輸入第"<<n<<"個數據:"<<endl;
cin>>p1->data;
};
p2->next=NULL;
return 0;
}//打印鏈表//
void sllist::print_list(){
node *p;
int n=0;
p=head->next;
cout<<"你輸入的數據如下:"<<endl;
if(head!=NULL)
do
{
n++;
cout<<"第"<<n<<"個數據爲:"<<p->data<<endl;
p=p->next;
}while(p!=NULL);
}//存取//
void sllist::find(){
int k;
int i;
node *p;
cout<<"你要查找第?個數據:"<<endl;
cin>>k;
p=head->next;
if(head!=NULL)
for(i=0;i<k-1;i++)
p=p->next;
cout<<"你要查找的數據爲:"<<endl;
cout<<p->data<<endl;
}//查找//
void sllist::search(){
int item;
node *p;
int n=0;
p=head->next;
cout<<"請輸入你要查找的數據:"<<endl;
cin>>item;
if(head!=NULL)
do{
n++;
if(p->data==item)
cout<<"你要找的數據存在且是第"<<n<<"個"<<endl;
p=p->next;
}while(p!=NULL);
}//插入//
node * sllist::insert(){
int k,i;
int item;
int choice;
node *p=head->next,*temp;
cout<<"請輸入你要插入的數據的值:"<<endl;
cin>>item;
cout<<"要在鏈表頭增加請輸入1;否則請輸入2。"<<endl;
cin>>choice;
switch(choice)
{
case 1:temp=new node;
temp->data=item;
head->next=temp;
temp->next=p;
break;
case 2:cout<<"請問你要在第幾個節點後增加數據?:"<<endl;
cin>>k;
for(i=0;i<k-1;i++)
p=p->next;
temp=new node;
temp->data=item;
temp->next=p->next;
p->next=temp;
break;
default:break;
};
return head;
}//刪除//
node * sllist::del(){
node *p=head;
node *temp;
int k,i;
cout<<"請問你要刪除第幾個節點?"<<endl;
cin>>k;
for(i=0;i<k-1;i++)
p=p->next;
temp=p;
temp=temp->next;
p->next=temp->next;
return head;
}
int main(){
sllist x;
x.creat_list();
x.print_list();
x.find();
x.search();
x.insert();
x.print_list();
x.del();
x.print_list();
return 0;
}