您的位置:首页 > 理论基础 > 数据结构算法

数据结构之线性链表的算法

2006-04-17 18:33 471 查看
信息来源:http://blog.csdn.net/heroooooo

文章作者:heroooooo

#include "iostream.h"
#include "malloc.h"
//这个只是一个小小的头文件
//这些都是用链表表示的线性链表 的一些最为常见的一些函数
//这些函数做得最不好的一个地方就是没有将线性表的长度存放在链表的头节点
#define ERROR 0
#define OK 1
#define NULL 0
typedef int ElemType ;
typedef int status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
status initlist(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
return 0;
}
status getitem(LinkList L,int i,ElemType &e)
{//此函数的功能是将一个线性链表的第i个元素取出来.并将它的值用e返回
LinkList q=0;
q=L->next;
int j=1;
while(q&&j<i)
{
q=q->next;j++;
}
if((!q)||j>i)
return ERROR;
e=q->data;
return OK;
}
status creatlist(LinkList &L,int n)
{//次函数的功能是逆向建立一个长度为n的线性链表
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;L->data=0;
LinkList q=0;
int i=0;
cout<<"please input "<<n<<" number:";
for(i=1;i<=n;i++)
{q=(LinkList)malloc(sizeof(LNode));
cin>>(q->data);
q->next=L->next;
L->next=q;
L->data++;}
return OK;
}
status Creatlist(LinkList &L,int n)
{//次函数的功能是按照顺序的方式建立一个线性链表
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;L->data=0;
LinkList p,q;
p=q=L;
int i=0;
for(i=0;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
cin>>p->data;
p->next=NULL;
q->next=p;q=p;
L->data++;
}
return OK;
}
status push(LinkList &L,ElemType e)
{//将一个元素推带堆栈中
if(L==NULL)
{L=(LinkList)malloc(sizeof(LNode));
L->data=0;}
LinkList q=0;
q=(LinkList)malloc(sizeof(LNode));
q->data=e;
q->next=L->next;
L->next=q;
L->data++;
return OK;
}
status pull(LinkList &L,ElemType &e)
{//这个函数的功能是将一个线性表拉出来一个元素,并且用e返回,在开始的时候还可以对文件
//判断一下
if((L==NULL)||(L->next==NULL))
return ERROR;
LinkList q;
q=L->next;
e=q->data;
L->next=q->next;
free(q);//最后别忘了将指针释放掉
return OK;

}

int lengthlist(LinkList L)
{//求线性链表的长度,并且用cout的值返回
int cout=0;
LinkList q=0;
q=L->next;
while(q)
{
cout++;
q=q->next;
}
return cout;
}
status coutlist(LinkList L)
{//依次将我们的线性链表打印出来
LinkList q=0;
q=L->next;
cout<<"the list number is"<<endl;
while(q)
{
cout<<(q->data)<<" ";
q=q->next;
}
return OK;
}

status getiteme(LinkList L,LinkList &q,ElemType e)
{//次函数的功能是在一个已经
//存在的链表中找到一个已知的数据的第一个位置,次函数的功能是将这个
//数的位置用一个指针q表示出来.
LinkList p=0;
p=L->next;
while(p&&(p->data)!=e)
{
p=p->next;
}
if(p&&(p->data==e))
{q=p;
return OK;}
else
{q=NULL;
return ERROR;
}
}
//函数是基本上做完了,现在只要将循环链表和双向链表做好了,就行了!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐