单链表的实现

单链表夜市线性表的一种表现形式,一个表节点由一个数据空间和一个指针域组成。指针域记录下一个结点的地址。

链表在插入,删除功能中效率高。但是读取某个结点的时候需要顺序读取。效率不如顺序存储形式。

下面是一些链表实现的代码:

// 链表.cpp : 定义控制台应用程序的入口点。 //

#include "stdafx.h" #define ERROR -1 #define OK 1;

struct Lnode {  int data;  struct Lnode *next; }; void init(Lnode *l) //初始化。头结点的data存的是链表的长度 {  l->next=NULL;  l->data=0; } int insertElem(Lnode *l,int pos,int e)  //插入 {  if(l->data<pos-1||pos<1) return ERROR;  l->data++;  for(int i=0;i<pos-1;i++)   l=l->next;  Lnode *newNode=(Lnode*)malloc(sizeof(Lnode));  newNode->data=e;  newNode->next=l->next;  l->next=newNode;                                                                                                                                           return OK; } int CreatList(Lnode *l) //直接创建一个链表,输入0的时候表示存取完毕 {       Lnode *head=l;    int data=0;    do    {     cin>>data;       if(data!=0)     head->data++;    else     break;     Lnode *node=(Lnode*)malloc(sizeof(Lnode));     node->data=data;     node->next=l->next;     l->next=node;     l=l->next;       }while(data);  return OK; } int getElem(Lnode *l,int pos)  //取某个位置的元素 {  /*if(pos<0||pos>l->data) return ERROR;*/  for(int i=0;i<=pos;i++)   l=l->next;

 return l->data; } void show(Lnode *l) {  l=l->next;  while(l)  {   cout<<l->data;   l=l->next;  } } int ListDelete(Lnode *l,int pos)  //删除某个位置的元素 {   if(pos<0||pos>l->data) return ERROR;   l->data--;   for(int i=0;i<pos-1;i++)    l=l->next;   int a=l->next->data;   l->next=l->next->next;   return a; }

void MergeList_L(Lnode *la,Lnode *lb,Lnode *lc)  //将生序排列的两个链表合并到LC {

 la=la->next;  lb=lb->next;  Lnode *head=lc;  while(la&&lb)  {   if(la->data<lb->data)   {    lc->next=la;    la=la->next;   }   else   {    lc->next=lb;    lb=lb->next;   }   lc=lc->next;   head->data++;  }  if(la)  {   lc->next=la;   /*head->data+=;*/  }  if(lb)  {lc->next=lb;head->data++;} } int _tmain(int argc, _TCHAR* argv[]) {  struct Lnode l,lb,lc;  init(&l);  init(&lb);  init(&lc);  //cout<<l.data;  //insertElem(&l,1,1);  //insertElem(&l,2,2);  //insertElem(&l,3,3);  CreatList(&l);  CreatList(&lb);

  MergeList_L(&l,&lb,&lc);  /*for(int i=0;i<10;i++)  {   cout<<getElem(&lc,i);  }*/   show(&l);  //cout<<getElem(&l,2);  // cout<<ListDelete(&l,5);  return 0; }

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值