C/C++链表实现

来源:互联网 发布:淘宝买药不是直接付款 编辑:程序博客网 时间:2024/05/16 11:08

     链表是线性表中典型的一个数据结构,本文讲介绍如何实现。本文代码在VC6.0上运行验证过。

    首先建立一个链表结构:

   

   typedef struct LNode
   {
       int data;
      struct LNode *next;

    }LNode,*LinkList;

 

        一个链表结点包含两个数据项,一个是该结点存储的数值数据,一个是该结点指向下一个结点的地址数据,也就是一个指向下一个结点的指针。接下来,为了大家能够清晰的明白链表的实现过程,将源码粘贴如下(关键部分都有注释):

       

    #include<iostream.h>
#include<malloc.h>

typedef struct LNode
{
 int data;
 struct LNode *next;

}LNode,*LinkList;

 

void CreatList_L(LinkList &L,int n)//创建一个包含n个元素的链表L
{
 L=(LinkList)malloc(sizeof(LNode));//开辟一个头结点空间
 L->next=NULL;
 L->data=n;//将首次建立结点的个数存到头结点的数据项中,也可以什么都不存,即没有这条语句
 for(int i=n;i>0;--i)
 {
 LinkList p=(LinkList)malloc(sizeof(LNode));//开辟第一个结点空间
   cin>>(p->data);//输入一个数据,
 

//将新结点插入到头结点之后
  p->next=L->next;
  L->next=p;
 }
}

void OutputList(LinkList &L)//输出链表L所存储的数值数据
{
 LinkList temp=(LinkList)malloc(sizeof(LNode));//建立一个临时结点
 temp=L;
 cout<<temp->data<<endl;//输出头结点的数值数据
 while(temp->next!=NULL)
 {
  temp=temp->next;//将下一个结点放入临时结点
  cout<<temp->data<<endl;//输出数值数据
 }
}

void InsertLinkList(LinkList &L,int n,int e)//在链表L第n个位置插入元素e
{
 int i=0;
 
 LinkList temp=(LinkList)malloc(sizeof(LNode));//开辟临时空间
 temp=L;
 while(temp->next!=NULL)//寻找第n-1个位置,因为该链表是单向的,所以每个结点都指向下一个结点,所以,要想插入第n个位置需找到第n-1个位置
 {  
  if(i==(n-1))
  break;
  temp=temp->next;
  i++;
 }
 if(i<n-1)
  cout<<"error"<<endl;
 else
 {
  LinkList p=(LinkList)malloc(sizeof(LNode));//开辟新的空间
  p->data=e;
  p->next=temp->next;//将参数插入
  temp->next=p;

 }
}
int main()
{
 LinkList L;//定义一个头结点
 CreatList_L(L,5);//创建见一个头结点为L的5个元素的链表
 InsertLinkList(L,3,10);//在链表L的第3个元素的位置插入元素10
 OutputList(L);
 return 0;
}

 如上代码只是一个如何建立链表的例子,还有很多不严谨的地方。该代码的目的是能提供一个链表建立的实例,在学习链表的时候做一个参考。