目录没加,不过我想弄个输出那个删除的结点的值(☻-☻)
#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
typedef struct zz
{
DataType data;//数据域
struct zz *next;//指针域
}Lzz,*LinkList;
Lzz *CreatFromHead()//头插法
{
LinkList L;//头指针
Lzz *s;//新结点指针
char c;
int flag=1;//定义变量
L=(LinkList)malloc(sizeof(Lzz));
L->next=NULL;
while(flag)
{
c=getchar();
if(c!='#')
{
s=(LinkList)malloc(sizeof(Lzz));//申请存储空间
s->data=c;
s->next=L->next;
L->next=s;
}
else
flag=0;
}
return L;
}
void Visit(Lzz *l)
{
LinkList p;
p=l->next;
while(p)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
int Insert(Lzz *l,int i,char x)//在第i个插入一个结点
{
LinkList m,n;//声明两个变量
int k;
m=l;k=0;
while(m!=NULL&&k<i-1){
m=m->next;
k=k+1;
}//查找第i-1个结点,m指向第i-1个结点
if((!m)||(k>i-1))
{
return 0;
}
n=(LinkList)malloc(sizeof(Lzz));
n->data=x;//存入数据
n->next=m->next;
m->next=n;
return 1;
}
int Delete(Lzz *l,int i)//删除第i个结点
{
LinkList p,q;
int j;
p=l;j=0;
while((p->next)&&(j<i-1))
{
p=p->next;
j=j+1;
}//查找第i-1个结点,p指向第i-1个结点
if((!p->next)||(j>i-1))
{
return 0;
}
q=p->next;
p->next=q->next;//删除q结点
free(q);//释放q结点所占的空间
return 1;
}
Lzz *Get(Lzz *l,int i)//查找第i个结点
{
LinkList z;
int y;
z=l;y=0;
while(z&&y<i)
{
z=z->next;y++;
}
if((!z)||(y<i))
{
return 0;
}
else
return z;
}
void main()
{
LinkList b,d;
int i;
char x;
int in,de;
Lzz *c;
//调用CreatFromHead函数创建单链表,返回头指针赋给变量b
printf("(1)输入:\n");
b=CreatFromHead();
//调用Visit函数对单链表进行遍历
printf("(2)输出:\n");
Visit(b);
//调用Get函数查找的单链表b中第i个数据元素
printf("(3)查找第__个元素:");
scanf("%d",&i);
d=Get(b,i);
if(d)printf("%c",d->data);
else printf("ERROR");
printf("\n");
//调用Insert函数实现在单链表b中第i个位置插入元素x
printf("(4)输入插入的位置__和元素__:");
scanf("%d,%c",&i,&x);
in=Insert(b,i,x);
printf("\n");
if(in==0)printf("ERROR");
else Visit(b);
printf("\n");
//调用Delete函数实现删除单链表b中第i个元素
printf("(5)请输入删除的位置__:");
scanf("%d",&i);
de=Delete(b,i);
if(de==0)printf("这个位置不存在");
else{Visit(b);}
printf("\n");
}
在输出ERROR的地方好像还有点问题(๑°⌓°๑)