/******************************************************************
线性表的单链表存储结构
******************************************************************/
typedef struct LNode{
ElemType data; //结点的数据域
struct LNode*next;//结点的指针域
}LNode, *LinkList;
/******************************************************************
取链表中的某个元素的函数GetElem函数实现
******************************************************************/
Status GetElem_L(LinkList L, int i, ElemType &e){
// L为带头结点的单链表的头指针
// 当第i个元素存在时,其赋值给e并返回OK,否则返回ERROR
p = L->next; j = 1;// 初始化,p指向第一个结点,j为计数器
while( p && j < i){// 顺指针向后查找,直到p指向第i个元素或p为空
p = p->next; ++j;
}
if(!p || j > i) return ERROR;// 第i个元素不存在
e = p->data;// 取第i个元素
return OK;
}//GetElem_L
/******************************************************************
单链表中的插入实现函数ListInsert_L
******************************************************************/
Status ListInsert_L(LinkList & L, int i, ElemType e){
// 在带头结点的单链表L中第i个位置之前插入元素e
p = L; j = 0;
while(p && j < i -1){ p = p -> next; ++j; }// 寻找第i - 1个结点
if( !p || j > i - 1)return ERROR;// i小于1或者大于表长+1
s = (LinkList)malloc(sizeof(LNode));// 生成新结点
s->data = e;s->next = p->next;// 插入L中
p->next = s;
return OK;
} // ListInsert_L
/******************************************************************
单链表中的删除实现函数ListDelete_L
******************************************************************/
Status ListDelete_L(LinkList &L, int i, ElemType &e){
// 带头结点的单链表L中,删除第i个元素,并由e返回其值
p = L; j = 0;
while(p->next && j < i - 1){//寻找第i个结点,并令p指向其前驱
p = p->next; ++j
}
if(!(p->next) || j > i - 1)return ERROR;//删除位置不合理
q = p->next;p->next = q->next;// 删除并释放结点
e = q->data;free(q);
return OK;
} // ListDelete_L
/******************************************************************
从表尾到表头逆向建立单链表的实现CreateList_L
******************************************************************/
int CreateList_L(LinkList &L, int n){// 逆位序输入n个元素的值,建立带表头结点的单链表L
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;// 先建立一个带头结点的单链表
for(i = n; i > 0; i--){
p = (LinkList)malloc(sizeof(LNode));// 生成新结点
scanf(&p->data);// 输入元素值
p->next = L->next; L->next = p;// 插入到表头
}
} // CreateList_L
/*
*ʵ
*/
#include
#include
#include
#include
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (!FALSE)
#endif
int length;
typedef int ElemType;
/**/
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
ElemType *next_e;
/**/
LinkList CreateList_L(LinkList L, int n)
{
printf("please input the length of the LinkList you want to create:");
scanf("%d", &n);
LinkList p;
int i;
L = (LinkList)malloc(sizeof(LNode));
if(L == NULL){
printf("can't create list.\n");
exit(0);
}
L->next = NULL; //ͷĵ
for(i = n; i > 0; i--)
{
p = (LinkList)malloc(sizeof(LNode)); //½
if(p == NULL){
printf("can't create list.\n");
exit(0);
}
scanf("%d", &p->data);
p->next = L->next;
L->next = p;
}
return L;
}
/*ԱL, ͷڵu052Aͷ洢ռ*/
int DestroyList(LinkList L)
{
LinkList q;
while(L->next){
q = L->next;
free(L->next);
L = q;
}
return 1;
}
/*LΪձ*/
LinkList ClearList(LinkList L)
{
LinkList p, q;
p = L->next; //pָһ
while(p){
q = p->next;
free(p); //ͷſռ
p = q;
}
L->next = NULL; //ͷָΪ,һձ
return L;
}
/*LΪձ,