线性表的链式存储及相关操作

/*
     编译环境 VC++6.0 
    带头结点的单链表,结点的下标从1开始 
*/  
/**************************************************/  
#include   
#include   
#include   
/**************************************************/  
#define OK      1  
#define ERROR   0  
#define TRUE    1  
#define FALSE   0  
typedef int     Status;               
typedef int     ElemType;  
/**************************************************/  
typedef struct node{  
    ElemType    data;                   //数据域  
    struct node *next;                  //指针域  
}Node, *pNode;  
/**************************************************/  
//创建一个带头结点的空的单链表  
pNode CreateListHead(void)  
{  
  
    pNode L = (pNode)malloc(sizeof(Node));  
    if (!L)  
        exit (-1);  
    L->next = NULL;  
    return L;  
}  
/**************************************************/  
//输出单链表  
void DisLinkList(pNode L)  
{  
    pNode p = L->next;  
    while (p)  
    {  
        printf("%d ", p->data);  
        p = p->next;  
    }  
}  
/**************************************************/  
//求单链表的长度  
int ListLength(pNode L)  
{  
    pNode p = L->next;  
    int k=0;  
    while (p)  
    {  
        p = p->next;  
        ++k;  
    }  
    return k;  
}  
/**************************************************/  
//取得链表中第pos个结点的值并存入e中  
Status GetElem(pNode L, int pos, ElemType *e)  
{  
    pNode p=L->next;  
    int i=1;  
  
    while (p && inext;  
        ++i;  
    }  
  
    if (!p || i>pos)  
        return ERROR;  
    *e = p->data;  
    return OK;  
}  
/**************************************************/  
//在链表中的第pos个位置插入一个值为e的结点  
Status ListInsert(pNode L, int pos, ElemType e)  
{  
    pNode p = L;  
    pNode pNew;  
    int i=1;  
  
    while (p && inext;  
        ++i;  
    }  
  
    if (!p || i>pos)   
        return ERROR;  
      
    pNew = (pNode)malloc(sizeof(Node));  
    pNew->data = e;  
    pNew->next = p->next;  
    p->next = pNew;  
    return OK;  
}  
/**************************************************/  
//删除链表L中的第pos个结点并将该结点的值存入e中  
Status ListDelete(pNode L, int pos, ElemType *e)  
{  
    pNode p = L;  
    pNode q;  
    int i=1;  
  
    while (p->next && inext;  
        ++i;  
    }  
  
    if (!(p->next) || i>pos)    
        return ERROR;  
    q = p->next;  
    p->next = q->next;  
    *e = q->data;  
    free(q);  
    return OK;  
}  
/**************************************************/  
int main(void)  
{  
     pNode L; 
    ElemType e;  
    int pos=7;  
    L = CreateListHead();  
    return 0;  
}  
/**************************************************/ 

 

你可能感兴趣的:(王道)