数据结构-静态单链表节点的查找

数据结构-静态单链表节点的查找

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:142            测试通过:88

描述

在实现单链表的时候,有时可以使用一维数组来表示,静态单链表节点的查找操作是静态单链表数据结构对象操作的重要内容,请您写一个程序完成在一个静态单链表查找某一个节点的操作。

请用如下函数完成上述功能,静态单链表结构的定义如下(强烈建议使用下面的定义和函数结构)

#define MAXSIZE 1000 //

typedef struct{
     ElemType data;
     int            cur;
}component,SLinkList[MAXSIZE];

int LocateElem_SL(SLinkList S,ElemType e)

输入

输入包括多组测试数据,每组测试数据包括多行,第一行是静态单链表的内容,第二行是要查找的元素个数N,第三行是要查找的N个元素,用空格隔开。

输出

对每组测试数据,如果查找成功则输出,该元素在静态单链表中的位置,否则输出0;

样例输入

S1 = ( M O K O I M G K J )
2
G U
S2 = ( K G H H P O A K O L K F O )
4
H O O S

样例输出

S1 = ( M O K O I M G K J )
LocateElem_SL(S, 'G') = 7
LocateElem_SL(S, 'U') = 0
S2 = ( K G H H P O A K O L K F O )
LocateElem_SL(S, 'H') = 3
LocateElem_SL(S, 'O') = 6
LocateElem_SL(S, 'O') = 6
LocateElem_SL(S, 'S') = 0

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef char Elemtype;
char a[10000];
char b[10000];
char c[10000];
typedef struct LNode
{
    Elemtype data;
    struct LNode *next;
} LNode,*LinkList;
void build(LinkList &la)
{
    if((la=new LNode)==NULL)
        exit(-1);
    la->next=NULL;
}
void tailbuild(LinkList &l)
{
    LinkList q,p;
    int i;
    p=l;
    int len=strlen(a);
    int f=0;
    for(i=0; i<len; i++)
    {
        if(a[i]=='(')
            f=1;
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')&&(f==1))
        {
            q=new LNode;
            q->data=a[i];
            p->next=q;
            p=q;
            p->next=NULL;
        }
    }
}
int seinsert(LinkList l,char ch)
{
    int i=1;
    LinkList p;
    p=l;
    p=p->next;
    while(p)
    {
        //cout<<p->data<<endl;
        if(p->data==ch)
        {
            break;
        }
        i++;
        p=p->next;
    }
    if(!p)
        return 0;
    return i;
}
void print(LinkList l)
{
    LinkList q;
    q=l;
    while(q->next!=NULL)
    {
        q=q->next;
        cout<<q->data<<" ";

    }
}
int main()
{
    LinkList la;
    int n,m,i;
    char ch;
    while(gets(a))
    {

        scanf("%d",&n);
        getchar();
        for(i=0; i<n; i++)
        {
            scanf("%c",&b[i]);
                scanf("%c",&ch);
        }
        build(la);
        tailbuild(la);
        puts(a);
        for(i=0; i<n; i++)
        {
            int t=seinsert(la,b[i]);
            printf("LocateElem_SL(S, '%c') = %d\n",b[i],t);
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值