#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX 20
typedef struct Lnode
{
char data;
struct Lnode *next;
}Linklist;
void create(Linklist *&L,char a[],int n) //创建链表
{
Linklist *s,*r;int i;
L=(Linklist*)malloc(sizeof(Linklist));
L->next=NULL;
r=L;
for(i=0;i<n;i++)
{
s=(Linklist*)malloc(sizeof(Linklist)); //创建新的结点
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void Insert(Linklist *&L,int i,char &e) //插入
{
int j=0;
Linklist *p=L,*s;
while(j<i-1&&p!=NULL)
{ j++;
p=p->next;
}
if(p==NULL)
printf("插入错误!");
else
{
s=(Linklist *)malloc(sizeof(Linklist));
s->data=e;
s->next=p->next;
p->next=s;
printf("插入成功!:");
}
}
void Delete(Linklist *&L,int i,char &e) //删除
{
int j=0;
Linklist *p=L,*q;
while(j<i-1&&p!=NULL)
{ j++;
p=p->next;
}
if(p==NULL)
printf("删除错误!:");
else
{
q=p->next;
if(q==NULL)
printf("删除错误!:");
p->next=q->next;
free(q);
printf("删除成功!:");
}
}
void Locate(Linklist *&L,char e)
{
int j=1;
Linklist *p=L;
while(p!=NULL&&p->data!=e)
{
p=p->next;
j++;
}
if(p==NULL)
printf("查找错误!");
else
printf("你要查找的元素在第%d个位置:",j);
}
void Display(Linklist *&L)
{
printf("该单链表如下:\n");
Linklist *p=L->next;
while(p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
char a[MAX],c;
Linklist *L;
int i,n;
printf("请输入你要建立的单链表元素个数:");
scanf("%d",&n);
for (int j=0;j<n;j++)
{
printf("输入第%d个元素值:",j+1);
scanf("%s",&a[j]);
}
create(L,a,n);
while(1) //选择菜单
{
int ch;
printf("\n请选择:\n1. 插入元素");
printf("\n2. 删除元素");
printf("\n3. 查找元素");
printf("\n4. 列表显示");
printf("\n5. 退出系统\n");
while(1)
{
scanf("%d",&ch);
if(ch>=1&&ch<=5)break;
else printf("\n请选择: 1|2|3|4|5.");
}
switch(ch)
{
case 1:printf("请输入你要插入的位置:");
scanf("%d",i);
printf("请输入你要插入的元素:");
scanf("%s",c);
Insert(L,i,c);break;
case 2:printf("请输入你要删除的位置:");
scanf("%d",i);
Delete(L,i,c);break;
case 3:printf("请输入你要查找的元素:");
scanf("%s",&c);
Locate(L,c);break;
case 4:Display(L);break;
case 5:exit(0); //退出程序
default: break;
}
}
}
评论0