链表相关操作代码实现
/*Author:shizhixin
Email:szhixin@gmail.com
Blog:http://blog.youkuaiyun.com/ShiZhixin
Date:Dec 21,2009
Function:链表的逆序输入,输出,插入及获取元素操作,目的在了解数据结构书上的算法怎么具体代码实现。其他操作参照书中不难实现。记得大学的时候开始学数据结构时遇到的困惑,或许,这不是困惑。但是对于初学者来说,可能有点用,为了方便初学者,程序尽量采用原书中的代码。*/
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreatList_L(LinkList &L,int n)
{
L=(LinkList)malloc(sizeof(LNode));
L->next =NULL;
for (int i= n;i>0; --i)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
scanf("%c",&p->data);
p->next =L->next;
L->next =p;
}
}
void PrintfList_L(LinkList &L,int n)
{
LinkList p=L;;
for (int i=0;i<n;i++)
{
p=p->next;
printf("%c",p->data);
}
}
Status GetElem_L(LinkList L,int i,ElemType &e)
{
LinkList p=L->next;
int j=1;
while (p&&j<i)
{
p=p->next;
++j;
}
if (!p || j<i)
return ERROR;
e=p->data;
return OK;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LinkList p=L;
int j=0;
while (p && j<i-1)
{
p=p->next;
++j;
}
if (!p || j>i-1)
return ERROR;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
void main()
{
printf("CreatList,input list data:/n");
LinkList L;
int listsize=5;
CreatList_L(L,listsize);
PrintfList_L(L,listsize);
printf("/n");
printf("GetElem_L,get the second elem in L:/n");
ElemType e;
GetElem_L(L,2,e);
printf("%c",e);
printf("/n");
printf("ListInsert_L,insert elem s into L at the position of 3:/n");
ElemType inserte='s';
ListInsert_L(L,3,inserte);
PrintfList_L(L,listsize+1);
}