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

来源:互联网 发布:ubuntu怎么安装依赖项 编辑:程序博客网 时间:2024/05/21 09:33

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 人又傻又蠢怎么办 微信不能收红包怎么办 gta5有任务没做怎么办 害怕死亡怎么办才16岁 被罩四个角的绳怎么办 电脑进水花屏了怎么办 法院判了不执行怎么办 优酷安装不上怎么办 保温杯磕了个坑怎么办 韩国旅游签证5年怎么办 新娘裙太长怎么办请茶 花无缺逾期20天怎么办 酷云密码忘了怎么办 我的声音不好听怎么办 耳朵后面长了个硬包怎么办 汽车油表不动了怎么办 油位传感器坏了怎么办 孕妇牙疼耳朵疼怎么办 耳机戴的耳朵疼怎么办 擤鼻涕左耳朵疼怎么办 擤完鼻涕耳朵疼怎么办 五岁儿童耳朵疼怎么办 耳朵里面长了个硬包怎么办 耳朵里有耳屎响怎么办 耳屎粘在耳膜上怎么办 小孩脖子上有淋巴结怎么办 大腿内侧的筋疼怎么办 大腿内侧磨的疼怎么办 孕晚期大腿根疼怎么办 吞口水耳朵会响怎么办 耳朵里面老痒该怎么办 牙疼头疼耳朵疼怎么办 耳朵里流水还疼怎么办 单侧耳朵里面疼怎么办 打到睾丸很疼怎么办 大拇手指关节疼怎么办 早上醒来耳朵嗡嗡响怎么办 两个月宝宝起湿疹怎么办 运动时耳朵闷堵怎么办 刚打的耳洞红肿怎么办 耳洞好了又肿了怎么办