链表的基本操作--包子

来源:互联网 发布:软件工程硕士报考条件 编辑:程序博客网 时间:2024/04/29 08:51

// 链表.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;
}

原创粉丝点击