回 帖 发 新 帖 刷新版面

主题:[原创]小弟写的一些关于链表的基本操作,有问题,请大家帮忙修改一下

#include<stdio.h>
#include<stdlib.h>

#define OVERFLOW -2
#define OK 1
#define ERROR 0

typedef struct LNode
{
    int data;
    struct LNode *next;
}Lnode,LinkList;

typedef int ElemType;

int InitList(LinkList *L)

   (*L)=(LinkList)malloc(sizeof(struct LNode)); 
   if(!(*L)) 
     exit(OVERFLOW);
   else
       (*L)->next=NULL; 
   return OK;
}//InitList

int DestroyList(LinkList *L)
{
   LinkList q;
   while(*L)
   {
     q=(*L)->next;
     free(*L);
     *L=q;
   }
   return OK;
}//DestroyList

int GetElem(LinkList L,int i,ElemType *e)
{//L为带头结点的单链表的头指针
 //当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
    LinkList p=(L)->next;//初始化,P指向第一个结点
    int j=1;                  //J为计数器
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i)
        return ERROR;    //第i个元素不存在
    ElemType e=p->data;  //取第i个元素
    return OK
}//GetElem

int PriorElem(LinkList L,ElemType cur_e,ElemType *pre_e)
{
    LinkList p=L->next;
    
    while(p->next)
    {
        LinkList q=p->next;
        if(q->data=cur_e)
        {
            *pre_e=p->data;
            return OK;
        }
        p=p->next;
    }
}//PriorElem

int ListInsert(LinkList L,int i,ElemType e)
{
    LinkList p=L;
    LinkList s;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>=i-1)
        return ERROR;
    else
    {
        s=(LinkList)malloc(sizeof(struct LNode));
        s->data=e;
        s->next=p->next;
        p->next=s;
        return OK;
    }
}//ListInsert

int ListDelete(LinkList *L,int i,ElemType *e)
{
    LinkList p=*L;
    int j=0;
    while(p->next&&j<=i-1)
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>=i-1)
        return ERROR;
    else
    {
        LinkList q=p->next;
        p->next=q->next;
        e=q->data;
        free(q);
        return OK;
    }
}//ListDelete

int ListInsertSorted(LinkList *L,ElemType e)
{
    LinkList s;
    LinkList p=(*L)->next;
    if(p->next&&p->data>=e)
    {
        s=(LinkList)malloc(sizeof(struct LNode));
        s->data=e;
        s->next=p->next;
        p->next=s;
        return OK;
    }
    else
        return ERROR;
}//ListInsertSorted

int PrintList(LinkList L)
{
    if(L!=null);
    {
        while(L->next)
        printf("%d",L->data);
        return OK;
    }
    else 
        return ERROR;
}//PrintList

回复列表 (共2个回复)

沙发


#include<stdio.h>
#include<stdlib.h>

#define OVERFLOW -2
#define OK 1
#define ERROR 0

typedef struct LNode
{
    int data;
    struct LNode *next;
}Lnode,LinkList;

typedef int ElemType;

int InitList(LinkList *L)

   L=(LinkList*)malloc(sizeof(struct LNode)); 
   if(!(L)) 
     exit(OVERFLOW);
   else
       L->next=NULL; 
   return OK;
}//InitList

int DestroyList(LinkList *L)
{
   LinkList *q;
   while(L)
   {
     q=L->next;
     free(L);
     L=q;
   }
   return OK;
}//DestroyList

int GetElem(LinkList L,int i,ElemType *e)
{//L为带头结点的单链表的头指针
 //当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
    LinkList p=L;//->next;//初始化,P指向第一个结点
    int j=1;                  //J为计数器
    while(p!=NULL&&(j<i))
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i)
        return ERROR;    //第i个元素不存在
    ElemType e=p->data;  //取第i个元素
    return OK
}//GetElem

int PriorElem(LinkList L,ElemType cur_e,ElemType *pre_e)
{
    LinkList p=L->next;
    
    while(p->next)
    {
        LinkList q=p->next;
        if(q->data=cur_e)
        {
            *pre_e=p->data;
            return OK;
        }
        p=p->next;
    }
}//PriorElem

int ListInsert(LinkList L,int i,ElemType e)
{
    LinkList p=L;
    LinkList s;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>=i-1)
        return ERROR;
    else
    {
        s=(LinkList)malloc(sizeof(struct LNode));
        s->data=e;
        s->next=p->next;
        p->next=s;
        return OK;
    }
}//ListInsert

int ListDelete(LinkList *L,int i,ElemType *e)
{
    LinkList p=*L;
    int j=0;
    while(p->next&&j<=i-1)
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>=i-1)
        return ERROR;
    else
    {
        LinkList q=p->next;
        p->next=q->next;
        e=q->data;
        free(q);
        return OK;
    }
}//ListDelete

int ListInsertSorted(LinkList *L,ElemType e)
{
    LinkList s;
    LinkList p=(*L)->next;
    if(p->next&&p->data>=e)
    {
        s=(LinkList)malloc(sizeof(struct LNode));
        s->data=e;
        s->next=p->next;
        p->next=s;
        return OK;
    }
    else
        return ERROR;
}//ListInsertSorted

int PrintList(LinkList L)
{
    if(L!=null);
    {
        while(L->next)
        printf("%d",L->data);
        return OK;
    }
    else 
        return ERROR;
}//PrintList
代码太长累随便改了一下还有两个错误!!!

板凳

谢谢楼上的兄弟拉 ,辛苦了 !!

我来回复

您尚未登录,请登录后再回复。点此登录或注册