分类: C/C++
2011-05-19 10:36:15
/*
* 链表实现函数
* Lzy 2011-5-18
*/
#include
typedef int ElemType;
typedef struct Node
{
ElemType data; /*结点值*/
struct Node *next; /*存储下一个结点的地址*/
}LNode, *LinkList;
void LinkListInitlist(LinkList *L) /*建立一个空的带头结点的单链表*/
{
(*L) = (LNode *)malloc(sizeof(LNode));
(*L)->next = NULL;
}
void LinkListCreate(LinkList L) /*建立一个单链表*/
{
LNode *p1, *p2;
p1 = L;
while(1)
{
p2 = (LNode *)malloc(sizeof(LNode));
printf("输入要保存的数据(-1结束):");
scanf("%d",&p2->data);
if(p2->data == -1)
break;
p1->next = p2;
p1 = p2;
}
p1->next = NULL;
}
int LinkListGetlen(LinkList L) /*求链表长度*/
{
int num = 0;
LNode *p = L->next;
while(p) /*结点不为空*/
{
num++; /*计数加一*/
p = p->next;
}
return num;
}
LNode *LinkListGetelembyNum(LinkList L,int n) /*按序号取元素*/
{
int num = 1;
LNode *p = L->next;
if(n < 1 || n > LinkListGetlen(L)) /*检查序号是否合法*/
{
printf("序号有误!\n");
return 0;
}
while(num < n)
{
num++; /*序号加一*/
p = p->next;
}
return p;
}
LNode *LinkListLocate(LinkList L, ElemType X) /*查找运算*/
{
LNode *p;
for(p = L->next; p != NULL; p = p->next)
{
if(p->data == X) /*判断数据域是否相等*/
return p;
}
printf("没有这元素!\n");
return 0;
}
int LinkListInsert(LinkList L,int n, ElemType X) /*在第n个元素后插入元素X*/
{
LNode *p1, *p2;
p1 = LinkListGetelembyNum(L,n); /*查找第n个节点*/
if(p1 == 0)
return 0;
p2 = (LNode *)malloc(sizeof(LNode)); /*给新节点分配存储空间*/
p2->data = X;
p2->next = p1->next; /*插入位置后继节点的指针域给新节点的指针域*/
p1->next = p2; /*插入位置指针域更改为新节点的指针*/
return 1;
}
ElemType LinkListDelelem(LinkList L,int n) /*在第n个元素后删除*/
{
LNode *p1, *p2;
ElemType temp;
p1 = LinkListGetelembyNum(L,n); /*查找第n个节点*/
if(p1 == 0)
return 0;
p2 = p1->next;
temp = p2->data;
p1->next = p2->next; /*删除p2所指向的节点*/
free(p2);
return temp; /*返回删除元素的值*/
}
void LinkListDisp(LinkList L) /*链表元素输出*/
{
LNode *p;
p = head->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
——第二部分:Linux C