您的位置:首页 > 编程语言

链表相关操作代码实现

2009-12-21 17:32 567 查看
链表相关操作代码实现
/*Author:shizhixin
Email:szhixin@gmail.com
Blog:http://blog.csdn.net/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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: