/c语言数据结构之顺序表单链表的创建及功能函数**/
#include "stdio.h"
#include "stdlib.h"
#define ERROR 0
#define OK 1
#define FALSE 0
#define TRUE 1
typedef int ElemType;
typedef int Status;
/创建一个单链表**/
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node* LinkList;
/初始化一个单链表/
Status InitList(LinkList *L)
{
(*L)= (LinkList)malloc(sizeof(Node));
if(!(*L))
{
return ERROR ;
}
(*L)->next = NULL;
return OK;
}
/在单链表L的第i个位置插入元素e*******/
Status InsertList(LinkList *L,int i,ElemType e)
{
LinkList p,q;
int c=1;
p = *L;
while(p&&c<i)
{
p = p->next ;
++c;
}
if(!p||c>i )
{
return ERROR;
}
q = (LinkList)malloc(sizeof(Node ));
q->data = e;
q->next = p->next;
p->next = q;
return OK ;
}
/输出单链表L内所有的结点元素****/
Status PrintList(LinkList L)
{
LinkList p;
p = L->next;
while(p)
{
printf("->%d",p->data);
p = p->next ;
}
printf("\n");
return OK ;
}
/删除单链表L的第i个元素,并将被删除的元素值返回给e******/
Status DeleteList(LinkList *L,int i,ElemType *e)
{
LinkList p,q;
int c = 1;
p = *L ;
while(p&&c<i)
{
p=p->next ;
++c;
}
if(!p||c>i)
{
return ERROR ;
}
q = p->next;
p->next = q->next;
*e = q->data ;
free(q);
return OK ;
}
/计算单链表L的长度,并将长度返回给length*****/
Status LengthList(LinkList L,int *length)
{
LinkList p;
p = L->next;
*length = 0;
while(p)
{
p = p->next ;
++*length;
}
return OK;
}
/*主函数**/
int main()
{
LinkList L;
Status i;
ElemType e;
int length;
i = InitList(&L);
printf("初始化结果:%d\n",i);
InsertList(&L,1,1);
InsertList(&L,2,2);
InsertList(&L,3,3);
PrintList(L);
DeleteList(&L,1,&e);
printf("被删除的结点元素是%d\n",e);
LengthList(L,&length);
printf("单链表内一共有%d个元素\n",length);
system("pause");
return 0;
}