#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");
}