#include<iostream>
#define _LinkList_
using namespace std;
typedef struct Lnode
{
char data;
struct Lnode *next;
}LN;
LN *CreateLinkList()
{
LN *head,*p,*pre;
char ch;
int i=1;
head=(LN *)malloc(sizeof(LN));
head->next=NULL;
pre=head;
while(1)
{
cout<<"输入第"<<i<<"个节点数据:";
while((ch=cin.get())!='\n')
{
cin.get();
p=(LN *)malloc(sizeof(LN));
pre->next=p;
p->next=NULL;
p->data=ch;
pre=p;
i++;
break;
}
if(ch=='\n')
break;
}
p->next=NULL;
return head;
}
int LinkListLength(LN *head)
{
int count=1;
LN *p;
p=head->next;
while(p->next)
{
p=p->next;
count++;
}
return count;
}
void SearchData(int i,LN *head)
{
LN *p;
int j=0;
p=head->next;
cout<<"输入要查找的节点:";
cin>>i;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p)
{
cout<<"该节点不存在!"<<endl;
}
else
{
cout<<"该节点数据为:"<<p->data<<endl;
}
}
LN *InsertData(int i,LN *head)
{
LN *p,*insert;
int j=1;
char ch;
cout<<"输入要插入的数据:";
cin>>ch;
cout<<"输入元素插入的位置:";
cin>>i;
if(i>LinkListLength(head))
{
cout<<"插入错误!"<<endl;
return NULL;
}
else if(i==1)
{
insert=(LN *)malloc(sizeof(LN));
insert->next=head->next;
head->next=insert;
insert->data=ch;
return head;
}
else
{
p=head->next;
while(p&&j<i-1)
{
p=p->next;
j++;
}
insert=(LN *)malloc(sizeof(LN));
insert->data=ch;
insert->next=p->next;
p->next=insert;
return head;
}
}
LN *DeleteData(int i,LN *head)
{
LN *p,*q;
int j=0;
cout<<"输入要删除的节点位置:";
cin>>i;
if(i>LinkListLength(head))
{
cout<<"该节点不存在,删除失败!"<<endl;
return NULL;
}
else
{
q=head;
while(q&&j<i)
{
p=q;
q=q->next;
j++;
}
p->next=q->next;
free(q);
return head;
}
}
void AddDataToTail(LN *head)
{
LN *p,*add;
char ch;
cout<<"输入要追加的数据:";
cin>>ch;
p=head;
while(p->next)
{
p=p->next;
}
add=(LN *)malloc(sizeof(LN));
add->data=ch;
p->next=add;
add->next=NULL;
cout<<"数据追加成功!"<<endl;
}
void PrintLinkList(LN *head)
{
LN *p;
p=head->next;
cout<<"链表序列为:";
while(p->next)
{
cout<<p->data<<"-->";
p=p->next;
}
cout<<p->data<<endl;
}
LN * FindMin(LN * head)
{
LN *p,*minptr;
char min;
p=head->next;
minptr=p;
min=minptr->data;
while(p!=NULL)
{
if(p->data<min)
{
minptr=p;
min=p->data;
}
p=p->next;
}
return minptr;
}
LN * DeleteSpecificData(char ch,LN * head)
{
LN *p,*q;
int j=0;
q=head->next;
while(q&&q->data!=ch)
{
p=q;
q=q->next;
}
if(q==NULL)
{
cout<<"数据不存在,删除失败!"<<endl;
return NULL;
}
else
{
p->next=q->next;
free(q);
return head;
}
}
int main()
{
int n=0;
int choice;
char ch;
LN *head,*head1,*head2,*result;
head=CreateLinkList();
if(head!=NULL)
{
cout<<"单链表head创建成功!"<<endl;
}
while(1)
{
system("pause");
system("cls");
cout<<"1.查找数据"<<endl;
cout<<"2.插入数据"<<endl;
cout<<"3.删除指定节点数据"<<endl;
cout<<"4.链表长度"<<endl;
cout<<"5.追加数据"<<endl;
cout<<"6.打印链表"<<endl;
cout<<"7.查找最小数据"<<endl;
cout<<"9.删除指定数据"<<endl;
cout<<"10.退出程序"<<endl;
cout<<"请选择操作:";
cin>>choice;
switch(choice)
{
case 1: SearchData(n,head);break;
case 2: result=InsertData(n,head);
if(result)
{
cout<<"数据插入成功!"<<endl;
}break;
case 3: result=DeleteData(n,head);
if(result)
{
cout<<"数据删除成功!"<<endl;
}break;
case 4: cout<<"链表长度为:"<<LinkListLength(head)<<endl;break;
case 5: AddDataToTail(head);break;
case 6: PrintLinkList(head);break;
case 7:result=FindMin(head);cout<<"最小数据:"<<result->data<<endl;break;
case 9:cout<<"输入要删除的数据:"<<endl;cin>>ch;result=DeleteSpecificData(ch,head);
if(result)
{
cout<<"该数据删除成功!"<<endl;
}break;
case 10: exit(0);
default:cout<<"输入错误!"<<endl;break;
}
}
return 0;
}
转载请注明出处