算法学习-数据结构之链表操作,创建,插入,删除,查找。

链表算是一个最简单的数据结构了。

这里写下链表的各种操作部分,之后对算法的实现需要这些基本的操作。


代码如下:

//
//  main.cpp
//  LinkList
//
//  Created by Alps on 14-7-25.
//  Copyright (c) 2014年 chen. All rights reserved.
//

#include <iostream>

using namespace std;

struct Node;
typedef struct Node *PtrNode;
typedef PtrNode List;
typedef PtrNode Position;

List MakeEmpty(List L);
int IsEmpty(List L);
int IsLast(Position P, List L);
Position Find(int X, List L);
void Delete(int X, List L);
Position FindPrevious(int X, List L);
void Insert(int X, List L, Position P);
void DeleteList(List L);
//Position Header(List L);
//Position First(List L);
//Position Advance(List L);
//int Retrieve(Position P);
void Print(List L);

struct Node{
    int Element;
    Position Next;
};

void Print(List L){
    Position P;
    P = L->Next;
    while (P != NULL) {
        printf("%d ",P->Element);
        P = P->Next;
    }
    printf("\n");
}

int IsEmpty(List L){
    return L->Next == NULL;
}

int IsLast(Position P, List L){
    return P->Next == NULL;
}


Position Find(int X, List L){
    Position P;
    P = L->Next;
    while (P->Element != X && P != NULL) {
        P = P->Next;
    }
    return P;
}

Position FindPrevious(int X, List L){
    Position P;
    P = L->Next;
    while (P->Next->Element != X && P->Next != NULL) {
        P = P->Next;
    }
    return P;
}

void Delete(int X, List L){
    Position P;
    P = FindPrevious(X, L);
    Position tmp;
    if (!IsLast(P, L)) {
        tmp = P->Next;
        P->Next = tmp->Next;
        free(tmp);
    }
}

void Insert(int X, List L, Position P){
    Position tmp = (Position)malloc(sizeof(struct Node));
    if (tmp == NULL) {
        printf("out of memory in fun Insert\n");
    }
    tmp->Element = X;
    tmp->Next = P->Next;
    P->Next = tmp;
}

void DeleteList(List L){
    Position P, tmp;
    P = L->Next;
    tmp = P->Next;
    while (P != NULL) {
        free(P);
        if (tmp == NULL) {
            break;
        }
        P = tmp;
        tmp = P->Next;
    }
    L->Next = NULL;
}



int main(int argc, const char * argv[])
{
    List L = (List)malloc(sizeof(struct Node));
    Insert(1, L, L);
    Insert(3, L, L->Next);
    Insert(5, L, L->Next->Next);
    Print(L);
    Position P = Find(3, L);
    printf("%d\n",P->Element);
    P = FindPrevious(3, L);
    printf("%d\n",P->Element);
//    Delete(2, L);
    Print(L);
    DeleteList(L);
    Print(L);
    
    return 0;
}

函数操作都很明显,也很简单~~

mark下,以后省的写的时候出现空指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值