单向链表(C++)

#include "stdafx.h"
#include <iostream>
using namespace std;
typedef struct Node{
    int data;
    struct Node* next;
}NODE,*LinkList;//定义类型

int _tmain(int argc, _TCHAR* argv[])
{
    LinkList link=(NODE *)malloc(sizeof(NODE));
    void InitLinkList(LinkList list);//初始化
    LinkList SearchLinkList(LinkList list,int d);//查找
    void InsertLinkList(LinkList list,int h,int e);//插入
    void DeleteLinkList(LinkList list,int e);
    void Display(LinkList list);//输出结果
    InitLinkList(link);
    cout<<"链表创建完成:"<<endl;
        Display(link);
        cout<<"\n";
    int sd;
    cout<<"请输入要查找的结点数据:"<<endl;
    cin>>sd;
    LinkList p=SearchLinkList(link,sd);
    if(p==NULL){
        cout<<"没有找到数据:"<<sd<<endl;
    }else{
        cout<<"找到数据:"<<sd<<" 且指针地址为:"<<p<<endl;
    }
    cout<<"\n";
    cout<<"请输入要在哪个结点后插入数据:"<<endl;
    int dh,de;
    cin>>dh;
    cout<<"请输入要插入的数据:"<<endl;
    cin>>de;
    InsertLinkList(link,dh,de);
    cout<<"插入完毕!"<<endl;
    Display(link);
    cout<<"\n";
    cout<<"请输入要删除数据:"<<endl;
    int ee;
    cin>>ee;
    DeleteLinkList(link,ee);
    cout<<"删除完毕!"<<endl;
    Display(link);
    system("pause");
    return 0;
}
//输出链表
void Display(LinkList list)
{
        LinkList q=list;
    while(q!=NULL){
        cout<<q->data<<"";
        q=q->next;
    }
    cout<<"\n";
}

//初始化
void InitLinkList(LinkList list)
{
    LinkList t;LinkList s=list;
    int d;
    cout<<"请顺次输入8个整数:"<<endl;
    for(int i=0;i<8;i++)
    {
        cin>>d; 
        if(i>0){
            t=(NODE *)malloc(sizeof(NODE));//从第2个开始分别分配内存
            t->data=d;//数据
            t->next=NULL;
            s->next=t;//作为下个元素
            s=t;
        }else{
        s->data=d;
        s->next=NULL;
        }
    }
}
//查找结点
LinkList SearchLinkList(LinkList list,int d)
{
    LinkList p=list;
    if(list!=NULL){
        while(p!=NULL)
        {
            if(p->data==d)//若查到,则退出循环
            {
                break;
            }
            p=p->next;//没有查到则继续,赋予下一个结点
        }
    }
    return p;
}
//插入结点,指定在数据h之后加入e
void InsertLinkList(LinkList list,int h,int e)
{
    LinkList p=NULL,next;
    if(list==NULL){
    cout<<"列表为空!";return;
    }
    p=SearchLinkList(list,h);
    if(p==NULL){
        cout<<"所要查询的结点不存在!";return;
    }
    next=p->next;//h所在结点的下一个结点
    LinkList n=(NODE *)malloc(sizeof(NODE));//新生成个结点指针
    n->data=e;
    n->next=next;
    p->next=n;//将结点p的下一个结点置为新的结点
}
//删除结点
void DeleteLinkList(LinkList list,int e)
{
    if(list==NULL){
    cout<<"列表为空!";return;
    }
    LinkList f=list,p;
    while(f!=NULL){
        if(f->next!=NULL&&(f->next)->data==e)//判断是否是e所在结点前面的结点
        {
            p=f->next;
            f->next=f->next->next;//f-e所在结点-下一个结点
            f=f->next->next;
            free(p);//释放e所在结点
        }else{
            f=f->next;
        }
    }
}

 

posted @ 2012-08-16 14:34  kiddy-star  阅读(414)  评论(0编辑  收藏  举报