您的位置:首页 > 其它

链表的基本操作--包子

2010-07-01 15:52 369 查看
// 链表.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

using namespace std;

#define elemtype char            //定义链表中的数据类型,自己可以改

//定义链表节点类型

typedef struct node

{

    elemtype data;

    struct node *next;

}node,*linklist;

//链表的初始化即一个头结点

int initlist_L(linklist &L)

{

    L=(node*)malloc(sizeof(node));    //向系统申请一个头结点

    if(L==NULL)

        return 0;

    L->next =NULL;

    return 1;                //初始化成功

}

//从单链表中获取第i个元素

int GetElem_L(linklist L, int i, elemtype& e)

{

    linklist p;

    int j;

    p=L->next ;        //初始化,p指向第一个节点

    j=1;

    while(p&&j<i)        //顺时针查找,知道找到p,或p为空

    {

        p=p->next ;

        ++j;

    }

    if(!p||j>i)        //第i个元素不存在

    {

        cout<<"i值不合法"<<endl;

        return 0;

    }

    e=p->data ;

    cout<<"成功!";

        return 1;

}

//插入节点

int ListInsert_L(linklist &L, int i, elemtype e)

{

    linklist p,s;

    int j;

    p=L;

    j=0;

    while(p&&j<i-1)            //寻找第i-1个节点

    {

        p=p->next ;

        ++j;

    }

    if(!p||j<i-1)

    {

        cout<<"i值错误!"<<endl;

        return 0;

    }

    linklist f;

    f=(linklist)malloc(sizeof(node));

    f->data =e;

    f->next =p->next ;

    p->next =f;

    cout<<"插入成功!"<<endl;

    return 1;

}

//删除链表的节点

int ListDelete_L(linklist &L, int i, elemtype &e)

{

    linklist p,q;

    int j;

    p=L;

    j=0;

    while(p->next &&j<i-1)

    {

        p=p->next ;

        ++j;

    }

    if(!(p->next )||j>i-1)

    {

        cout<<"i值非法"<<endl;

        q=p->next ;

        e=q->data ;

        p->next =q->next ;

        delete(q);

        cout<<"删除成功"<<endl;

        return 1;

    }

}

//创建新的单链表

void CreateList_L(linklist &L,int n)

{

    linklist p;

    int i;

    L=(linklist)malloc(sizeof(node));

    L->next =NULL;

    scanf(&p->data );

    p->next =p;

}

int main()

{

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct null delete