链表的处理(《数据结构》例题)

来源:互联网 发布:rc4加密算法 c语言 编辑:程序博客网 时间:2024/06/05 21:51

#include"stdio.h"
#include"stdlib.h"
#define ElemType int
typedef struct node
{ ElemType data;
struct node *next;
}Lnode;
Lnode *p,*q,*s,*head;
void outlin(Lnode *h);
void creat();
void insert(Lnode *h,ElemType x,ElemType y);
void delete_node(Lnode *h,ElemType x);
void reverse(Lnode *h);
void search(Lnode *h,int x);


void main()
{ int x,y,cord;
do{
 printf("/n----------    主菜单   -------------/n");
    printf("  1  建立线性表        2  擦入一个元素/n");
    printf("  3  删除一个元素      4  逆置链表 /n");
 printf("  5  搜索某数存在否    6  结束程序运行  /n");
    printf("----------------------------------------  /n");
    printf("请输入您的选择(1,2,3,4,5)/n");
 scanf("%d",&cord);
switch(cord)
{
case 1:  {creat();   outlin(head);
 break;}
case 2:{  printf("/n x,y=?注意用逗号分隔");
       scanf("%d,%d",&x,&y);
       insert(head,x,y);
    outlin(head);
      }
 break;
case 3:{  printf("/n x=?");
    scanf("%d",&x);
    delete_node(head,x);
    outlin(head);
    }
 break;
case 4: reverse(head); outlin(head); break;
case 5: printf("/n请输入要搜索的数X=?  ");
     scanf("%d,&x");
  search(head,x);
  break;
case 6:exit(0);
}
}while(cord<=4);
}

void creat()
{
 ElemType x;    Lnode *ptr;
head=(Lnode *)malloc(sizeof(Lnode));
head->next=NULL;   p=head;
printf("/n x=?"); scanf("%d",&x);
while(x!=-999)
{
 ptr=(Lnode*)malloc(sizeof(Lnode));
ptr->data=x;  ptr->next=NULL;
p->next=ptr;
p=ptr;
printf("/n x=?"); scanf("%d",&x);
}
}

void outlin(Lnode  *h)
{ p=h->next; printf("/n  ");
while(p!=NULL) { printf("  data=%4d",p->data);
                  p=p->next;      }
printf("/n  输出结束  /n/n");
}
void insert(Lnode *h,ElemType x,ElemType y)

{
 s=(struct node *)malloc(sizeof(struct node));
s->data=y;
q=h; p=h->next;
while(p!=NULL && p->data!=x)   {q=p;p=p->next;}
q->next=s; s->next=p;
}

void delete_node(Lnode *h,ElemType x)
{
q=h; p=q->next;
while((p!=NULL) && (p->data!=x)) { q=p;  p=p->next; }
if(p==NULL) printf("/n  x  不存在 ! ");
else {
 q->next=p->next;
   free(p);
}
}

void reverse(Lnode *h)
{
 p=h->next;
 h->next=NULL;
 while(p!=NULL)
 {
  q=p->next;
     p->next=h->next;
     h->next=p;
     p=q;
 }
}

void search(Lnode *h,int x)

  p=h->next;
  while(p!=NULL)
  {
   if(x==p->data)
    printf("/n 该数据存在! /n");
   else p=p->next;
  }
  if(p==NULL)
   printf("/n  没有该数据!  /n");
}