单链表,希望能再改进一点(加个目录,和一些小问题在优化一下)……

目录没加,不过我想弄个输出那个删除的结点的值(☻-☻)

#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的地方好像还有点问题(๑°⌓°๑)