2.13带头结点的单链表的Locate操作
![2.13带头结点的单链表的Locate操作 - 雨竹清风 - 雨竹清风的博客 2.13带头结点的单链表的Locate操作 - 雨竹清风 - 雨竹清风的博客](http://img2.ph.126.net/IERwq1O750F3MQk8Mr7w7w==/6619131467468129099.jpg)
依次进行比较即可
算法代码:
Locate.cpp
#include "Locate.h"
#include <iostream>
#include <math.h>
using namespace std;
Locate::Locate(void)
{
}
void Locate::InitLinklist(LinkList &L){
L =(LinkList)malloc(sizeof(LNode));//产生头结点
if(!L)exit(OVERFLOW);//分配失败
(L)->next=NULL;//L->next指向空
}
int Locate::Insert_LinkList(LinkList &L){//向单链表中插入数据
LinkList p=L;
char a;
cout<<"请输入任意一个字符:";
cin>>a;
char flag='Y';
while (flag!='N')
{
LinkList s = (LinkList)malloc(sizeof(LNode));//生成一个结点
s->data=a;
s->next=NULL;
p->next=s;
p=s;
cout<<"还要继续添加结点吗?('Y'OR'N')";
cin>>flag;
if (flag=='Y')
{
cout<<"请输入任意一个字符:";
cin>>a;
}
}
p=L;
return 0;
}
void Locate::OutLinkList(LinkList L)
{//输出链表中的数据
LinkList p=L->next;
while(p != NULL){
cout<<(char)p->data<<endl;
p=p->next;
}
}
int Locate::LocateValue(LinkList L,char x){//查找X所在的位置
LinkList p = L->next;
int i = 0;
for(p ; p && p->data != (int)x; p = p->next)
{
i++;
}
if(p != NULL)
return i;
else
return 0;
}
Locate::~Locate(void)
{
}
Locate.h
#pragma once
#include <iostream>
using namespace std;
typedef struct LNode//定义结点
{
int data;
struct LNode *next;
}LNode,*LinkList;
class Locate
{
private:
public:
Locate(void);
void InitLinklist(LinkList &L);//初始化
void OutLinkList(LinkList L);//输出
int Insert_LinkList(LinkList &L);//插入
int LocateValue(LinkList L,char x);//查找
~Locate(void);
};
2-13.cpp
#include <iostream>
#include "Locate.h"
using namespace std;
int main(){
Locate locate;
LinkList L=NULL;
char x;
int loc;//所在的位置
locate.InitLinklist(L);
locate.Insert_LinkList(L);
locate.OutLinkList(L);
cout<<"请输入要查找的字符:";
cin>>x;
loc=locate.LocateValue(L,x);
if(loc != 0)
{
cout<<x<<"所在的位置为:"<<loc+1<<endl;
}
else
{
cout<<x<<"不存在!"<<endl;
}
system("pause");
return 0;
}