C++串的简单模式匹配
先建立一个单链表L#include <stdio.h>
#define elemtype int
struct node
{
elemtype data;
node *next;
};
struct linklist
{
node *head;
node *hcreat()
{ node *s,*p;
elemtype i;
printf("输入元素,到0为止:");
scanf("%d",&i);
p=new node;
head=p;
p->next=NULL;
while(i)
{ s=new node;
s->data=i;
p->next=s;
s->next=NULL;
p=s;
scanf("%d",&i);
}
return head;
}
node *locate(node *head,elemtype x)
{
printf("查找x:");
scanf("%d",&x);
int j=1;
node *p;
p=head->next;
while((p!=NULL)&&(p->data!=x))
{p=p->next ;
j++;
}
if(p==NULL)
printf("不存在要查找的数!\n");
else
printf("所查数为第%d位",j);
return p;
}
void insert(node *head,elemtype x,elemtype y)
{node *q,*p,*s;
printf("将y插入x之前:\n");
scanf("%d %d",&y,&x);
s=new node;
s->data=y ;
q=head;
p=q->next;
while((p!=NULL)&&(p->data!=x)) //查找x的指针
{
q=q->next;
p=p->next;
}
if(p==NULL)
printf("不存在此%d\n",x);
else
{s->next = q->next ;
q->next=s; //插入y
}
}
void delete1(node *head,elemtype x)
{ node *p,*q;
q=head;
p=head->next;
printf("删除x:\n");
scanf("%d",&x);
while((p!=NULL)&&(p->data!=x))
{ q=p;
p=p->next;
}
if(p==NULL)
printf("不存在要删除的数 \n");
else
{ q->next=p->next;
delete(p);
}
}
void change(node *head,elemtype x,elemtype y)
{ node *s,*q;
printf("要改x:\n");
scanf("%d",&x);
s=new node;
q=head;
while((q!=NULL)&&(q->data!=x)) //查找x的指针
{
q=q->next;
}
if(q==NULL)
printf("不存在要改的数\n");
else
{ printf("为y:\n");
scanf("%d",&y );
s->data=y;
*q=*s; //将x改为y
}
}
void print(node *head)
{ node *p;
p=head->next;
printf("结果\n");
while(p!=NULL)
{
printf("%d", *p );
printf("\n");
p= p->next ;
}
}
};
void main()
{ linklist l ;
elemtype x=0,y=0;
int k;
node *h;
h=l.hcreat ();
printf("1.插入 2.删除 3.查找 4.修改 5.输出 \n");
printf("选择1~5否则退出:\n");
scanf("%d",&k);
while((k>=1)&&(k<=5))
{
switch(k)
{
case 1: l.insert (h,x,y);
l.print (h);
break;
case 2: l.delete1 (h,x);
l.print (h);
break;
case 3: l.locate(h,x);
break;
case 4: l.change (h,x,y);
l.print (h);
break;
case 5: l.print (h);
break;
}
printf("选择1~5否则退出:\n");
scanf("%d",&k);
}
}