----写前:这是一个做为练习记录,别无它用。不足之处还请指正!
这次练习线性链表环境为ubuntu10.10+vim+gcc,分三个文件,一个是nodetype.h,node.h,listnode.c。
源码如下:
nodetype.h源码:
#ifndef _NODETYPE_H_
#define _NODETYPE_H_
#define OK 1;
#define ERROR 0;
typedef int ElemType;
typedef int Status;
#endif
#define _NODETYPE_H_
#define OK 1;
#define ERROR 0;
typedef int ElemType;
typedef int Status;
#endif
node.h源码:
#ifndef _NODE_H_
#define _NODE_H_
#include " nodetype.h "
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode;
Status DisplayList(LNode * head);
LNode * CreateList(LNode * head, int n);
LNode * InsertElement(LNode * head, int position,ElemType data);
LNode * GetElement(LNode * head, int position);
#endif
#define _NODE_H_
#include " nodetype.h "
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode;
Status DisplayList(LNode * head);
LNode * CreateList(LNode * head, int n);
LNode * InsertElement(LNode * head, int position,ElemType data);
LNode * GetElement(LNode * head, int position);
#endif
listnode.h源码:
#include
<
stdio.h
>
#include < stdlib.h >
#include < string .h >
#include " node.h "
LNode * CreateList(LNode * head, int n)
{
LNode * p, * p1;
p1 = head = ( LNode * )malloc( sizeof (LNode) );
if (NULL == p1)
{
printf( " Apply memory failed \n " );
return head;
}
p1 -> next = NULL;
printf( " Please input the list root data: " );
scanf( " %d " , & p1 -> data);
return head;
}
Status DisplayList(LNode * head)
{
printf( " -----------------------------\n " );
LNode * temp;
temp = head;
while (temp != NULL)
{
printf( " Address:0x%x\tData:%d\tNext:0x%d \n " ,(unsigned int )temp,temp -> data,(unsigned int )temp -> next);
temp = temp -> next;
}
printf( " -----------------------------\n " );
}
LNode * InsertElement(LNode * head, int position,ElemType data)
{
if (NULL != head)
{
LNode * node;
node = (LNode * )malloc( sizeof (LNode));
LNode * p1;
p1 = head;
if (position <= 1 )
{
node -> data = data;
node -> next = p1;
head = node;
}
else
{
int i = 0 ;
for (i = 1 ;i < position - 1 ;i ++ )
{
p1 = p1 -> next;
}
if (NULL != node)
{
node -> data = data;
node -> next = p1 -> next;
p1 -> next = node;
}
}
}
return head;
}
LNode * GetElement(LNode * head, int position)
{
LNode * node;
if (NULL != head)
{
LNode * p1;
p1 = head;
while ((position -- ) > 1 && NULL != p1 -> next)
{
p1 = p1 -> next;
}
if (NULL != p1)
node = p1;
}
return node;
}
void main()
{
LNode * node;
node = NULL;
node = CreateList(node, 3 );
if (node == NULL)
{
printf( " Create List Failure!\n " );
}
DisplayList(node);
int pos,val = 1 ;
while (val > 0 )
{
printf( " Please input the data position and value(as 1,2 end by value<1) which you want to insert: " );
scanf( " %d,%d " , & pos, & val);
node = InsertElement(node,pos,val);
DisplayList(node);
}
LNode * elem;
pos = 1 ;
while (pos)
{
printf( " Please input the position no. which element you want to find(end by position<1): " );
scanf( " %d " , & pos);
elem = GetElement(node,pos);
printf( " Element at %d data: %d\n " ,pos,elem -> data);
}
free(node);
}
#include < stdlib.h >
#include < string .h >
#include " node.h "
LNode * CreateList(LNode * head, int n)
{
LNode * p, * p1;
p1 = head = ( LNode * )malloc( sizeof (LNode) );
if (NULL == p1)
{
printf( " Apply memory failed \n " );
return head;
}
p1 -> next = NULL;
printf( " Please input the list root data: " );
scanf( " %d " , & p1 -> data);
return head;
}
Status DisplayList(LNode * head)
{
printf( " -----------------------------\n " );
LNode * temp;
temp = head;
while (temp != NULL)
{
printf( " Address:0x%x\tData:%d\tNext:0x%d \n " ,(unsigned int )temp,temp -> data,(unsigned int )temp -> next);
temp = temp -> next;
}
printf( " -----------------------------\n " );
}
LNode * InsertElement(LNode * head, int position,ElemType data)
{
if (NULL != head)
{
LNode * node;
node = (LNode * )malloc( sizeof (LNode));
LNode * p1;
p1 = head;
if (position <= 1 )
{
node -> data = data;
node -> next = p1;
head = node;
}
else
{
int i = 0 ;
for (i = 1 ;i < position - 1 ;i ++ )
{
p1 = p1 -> next;
}
if (NULL != node)
{
node -> data = data;
node -> next = p1 -> next;
p1 -> next = node;
}
}
}
return head;
}
LNode * GetElement(LNode * head, int position)
{
LNode * node;
if (NULL != head)
{
LNode * p1;
p1 = head;
while ((position -- ) > 1 && NULL != p1 -> next)
{
p1 = p1 -> next;
}
if (NULL != p1)
node = p1;
}
return node;
}
void main()
{
LNode * node;
node = NULL;
node = CreateList(node, 3 );
if (node == NULL)
{
printf( " Create List Failure!\n " );
}
DisplayList(node);
int pos,val = 1 ;
while (val > 0 )
{
printf( " Please input the data position and value(as 1,2 end by value<1) which you want to insert: " );
scanf( " %d,%d " , & pos, & val);
node = InsertElement(node,pos,val);
DisplayList(node);
}
LNode * elem;
pos = 1 ;
while (pos)
{
printf( " Please input the position no. which element you want to find(end by position<1): " );
scanf( " %d " , & pos);
elem = GetElement(node,pos);
printf( " Element at %d data: %d\n " ,pos,elem -> data);
}
free(node);
}
以下为部分截图:
源码图
测试图
注:未完待续(只写了创建链表、插入、获取、打印四个函数)