链表相关操作代码实现
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);
}
/*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);
}
相关文章推荐
- java实现链表以及相关操作
- DataGridView中绑定DataTable数据及相关操作实现代码
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- c语言实现链表的相关的操作
- 链表操作代码实现
- (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
- 双向链表的相关操作C++实现
- 我面试遇到的C语言中单链表相关的操作粗浅实现
- 链表的相关操作及简单通讯录系统的实现
- JQuery select控件的相关操作实现代码
- 单链表相关操作代码
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- java实现链表及其相关操作
- C语言实现单链表相关操作
- C代码实现:操作循环链表按规则移除结点
- C语言实现链表的相关操作
- JQuery select控件的相关操作实现代码
- 带头带环双向链表的实现及其相关操作。。
- 使用迭代器(Iterator)来实现链表的相关操作
- DataGridView中绑定DataTable数据及相关操作实现代码