/*
线性表的链式存储实现及相关操作 C语言版本
作者:Shmily
日期:2011年8月30日
编译环境 VC++6.0
带头结点的单链表,结点的下标从1开始
*/
/**************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/**************************************************/
#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 && i<pos)
{
p = p->next;
++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 && i<pos)
{
p = p->next;
++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 && i<pos)
{
p = p->next;
++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(L);
return 0;
}
/**************************************************/