编辑代码

#include <stdio.h>
#include "malloc.h"
#define DATATYPE2 char
typedef struct node
{
    DATATYPE2 data;
    struct node *next;
}LINKLIST;
LINKLIST *rcreate()
{
    LINKLIST *head,*last,*p;
    char ch;
    p=(LINKLIST *)malloc(sizeof(LINKLIST));
    head=p;
    last=p;
    p->next=NULL;
    while((ch=getchar())!='\n')
    {
        p=(LINKLIST *)malloc(sizeof(LINKLIST));
        p->data=ch;
        last->next=p;
        last=p;
        p->next=NULL;
    }
    return(head);
}
LINKLIST *hcreate()
{
    LINKLIST *head,*p;
    char ch;
    head=(LINKLIST *)malloc(sizeof(LINKLIST));
    head->next=NULL;
    while((ch=getchar())!='\n')
    {
        p=(LINKLIST *)malloc(sizeof(LINKLIST));
        p->data=ch;
        p->next=head->next;
        head->next=p;
    }
    return(head);
}
LINKLIST *INITIATE()
{
    LINKLIST *head;
    head=(LINKLIST *)malloc(sizeof(LINKLIST));
    head->next=NULL;
    return(head);
}
int LENGTH(LINKLIST *head)
{
    int i;
    LINKLIST *p;
    p=head;
    i=0;
    while(p->next!=NULL)
    {
        p=p->next;
        i++;
    }
    return(i);
}
DATATYPE2 GET(LINKLIST *head,int i)
{
    int j;
    LINKLIST *p;
    j=0;
    p=head;
    while((j<i)&&(p->next!=NULL))
    {
        p=p->next;
        j=j+i;
    }
    if(j==i)
        return(p->data);
    else
        return(NULL);
}
LINKLIST *LOCATE(LINKLIST *head,DATATYPE2 X)
{
    LINKLIST *P;
    P=head->next;
    while(p!=NULL&&p->data!=X)
        p=p->next;
    return(p);
}
void INSERT(LINKLIST *head,int i,DATATYPE2 X)
{
    int j;
    LINKLIST *h,*p;
    h=(LINKLIST*)malloc(sizeof(LINKLIST));
    h->data=X;
    h->next=NULL;
    p=head;
    j=0;
    while((p->next!=NULL)&&(j<i-1))
    {
        p=p->next;
        j=j+1;
    }
    if(j==i-1)
    {
        h->next=p->next;
        p->next=h;
    }
    else
    printf("insert fail");
}
void DELETE(LINKLIST *head,int i)
{
    int j;
    LINKLIST *p,*q;
    p=head;
    j=0;
    while((p->next!=NULL)&&(j<i-1))
    {
        p=p->next;
        j=j+i;
    }
    if((p->next!=NULL)&&(j==i-1))
    {
        q=p->next;
        p->next=q->next;
        free(q);
    }
    else
    printf("delete fail");
}
int EMPTY(LINKLIST *head)
{
    if (head->next==NULL)
    return(1);
    else
    return(0);
}
void print(LINKLIST *head)
{
    LINKLIST *p;
    p=head->next;
    while(p!=NULL)
    {
        printf("%c",p->data);
        p==->next;
    }
}
main()
{
    LINKLIST *head,*p;
    char ch;
    head=hcreate();
    print(head);
    printf("\n");
    INSERT(head,1,'m');
    print(head);
    printf("\n");
    ch=GET(head,1);
    printf("%c",ch);
    printf("\n");
    p=LOCATE(head.'m');
    printf("%c",p->data);
    printf("\n");
    DELETE(head,1);
    print(head);
    printf("\n");
    printf("%d",LENGTH(head));
}