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

信息来源: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;
 }
}
//函数是基本上做完了,现在只要将循环链表和双向链表做好了,就行了!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值