CPP

C++串的简单模式匹配

先建立一个单链表L,以“0”为结束符;实现查找功能,如输入数据不存在应报错;实现制定位置插入功能;实现删除功能,如输入数据不存在应报错;实现修改功能,如输入数据不存在应报错;利用主菜单实现以上所有功能,并输出。
#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);
  
}
}