单链表

单链表是一种链式存储结构,它可以通过一组任意的存储单元来存储线性表中的数据元素。

头文件 声明

//

//  linklist.h

//  Datastructure

//

//  Created by zhou on 14-5-25.

//  Copyright (c) 2014年 zhou. All rights reserved.

//



#ifndef __Datastructure__linklist__

#define __Datastructure__linklist__



#include <iostream>



typedef struct Node  //单链表结构体

{

    int data;

    struct Node *next;

    ~Node(){delete next;};

}*linklist;



linklist createList(linklist &L);     //生成一个头结点为L的单链表

void printfL(linklist &L);            //打印单链表

Node *getElem (linklist L,int i);     //获取第i个结点

Node *findElem(linklist L,int data);  //获取值为data的结点

void insertL(linklist L,int index,int x);//在index位置插入值为x的结点

void deleteL(linklist L,int index);     //删除下标为index的结点

int length(linklist L);                 //获取链表长度

#endif /* defined(__Datastructure__linklist__) */

实现

//

//  linklist.cpp

//  Datastructure

//

//  Created by zhou on 14-5-25.

//  Copyright (c) 2014年 zhou. All rights reserved.

//



#include "linklist.h"



linklist createList(linklist &L)  

{

    Node *s,*r;

    int x;

    L = new Node;

    r = L;

    scanf("%d",&x);

    while(x != -1)

    {

        s = new  Node;

        s ->data = x;

        r ->next = s;

        r = s;

        scanf("%d",&x);

    }

    r ->next = NULL;

    return L;

}



void printfL(linklist &L)

{

    Node *p = L->next;

    while(p!= NULL)

    {

        printf("%d ",p->data);

        p = p->next;

    }

    printf("\n");

}



Node *getElem (linklist L,int i)

{

    int j = 1;

    Node *p = L->next;

    if(i==0)

        return L;

    if(i<0)

        return NULL;

    else

    {

        while (j<i&&p!=NULL) {

            p = p->next;

            j++;

        }

    }

    return p;

}



Node *findElem(linklist L,int x)

{

    Node * p = L->next;

    while (p&&p->data != x) {

        p = p->next;

    }

    return p;

}



void insertL(linklist L,int index,int x)

{

    Node *q = getElem(L, index-1);

    Node *p = new Node;

    p->data = x;

    p->next = q->next;

    q->next = p;

}



void deleteL(linklist L,int index)

{

    Node *p = getElem(L, index-1);

    Node *q = p->next;

    p->next = q->next;

    free(q);

}

int length(linklist L)

{

    int len = 0;

    Node *p = L->next;

    if(p==NULL)

        return 0;

    while(p)

    {

        len++;

        p = p->next;

    }

    return len;

}

主函数 测试

//

//  main.cpp

//  Datastructure

//

//  Created by zhou on 14-5-25.

//  Copyright (c) 2014年 zhou. All rights reserved.

//



#include "linklist.h"

#include <iostream>

using namespace std;



int main(int argc, const char * argv[])

{



    // insert code here...

    std::cout << "Hello, World!\n";

    linklist L;

    linklist st = createList(L);

    printfL(st);

    //cout<<sizeof(int)<<endl;

    //cout<<sizeof(L)<<endl;

    //cout<<getElem(L, 3)<<endl;

    //cout<<findElem(L, 4)<<endl;

    insertL(L, 3, 100);

    printfL(L);

    deleteL(L, 2);

    printfL(L);

    cout<<length(L)<<endl;

    return 0;

}

 

你可能感兴趣的:(单链表)