线性表之单链表

来源:互联网 发布:fifo算法和lru算法 编辑:程序博客网 时间:2024/05/24 06:29
#include  "stdafx.h"#include<iostream>using namespace std;#include<malloc.h>#define OK               1        //正确#define ERROR            0        //失败typedef int ElementType;typedef  struct LNode{                //定义结构体        ElementType data;    LNode *next;}LNode,*LinkList;//初始化单链表void init(LinkList &L,int n){    if(n<0) return ;    L = (LinkList) malloc(sizeof(LNode));    L->next=NULL;//创建头指针    int data;    LinkList node;    for(int i=0;i<n;i++)    {        cin>>data;        node = (LinkList) malloc(sizeof(LNode));//创建LNode的节点        node->data=data;        node->next=L->next;        L->next=node;    }}//获取单链表第i个位置的元素eint getElement(LinkList &L,int i,ElementType &e){    LNode *p;    int j=1;    p=L->next;    while(p && j<i)    {        p=p->next;        ++j;    }    if(!p || j>i)    {        cout<<"没有找到位置序号"+i;        return ERROR;    }    e=p->data;    cout<<"单链表第"<<i<<"个位置的元素是:"<<e;    return OK;}//删除单链表的第i个位置的元素void insert(LinkList &L,int i,ElementType &e){    LNode *p;    int j=1;    LinkList node;    p=L;    while(p && j<i)    //寻找第i-1个节点    {        p=p->next;        ++j;    }    if(!p || j>i)    {        cout<<"插入的位置已经超出边界"<<endl;        return;    }    node = (LinkList) malloc(sizeof(LNode));//创建LNode的节点    node->data=e;    node->next = p->next;    p->next = node;}//向单链表的第i个位置插入元素evoid delLink(LinkList &L,int i,ElementType &e){    LNode *p,*q;    int j=1;    LinkList node;    p=L;    while(p->next && j<i)    //寻找第i节点,也可以寻找第i-1个节点    {        p=p->next;        ++j;    }    if(!(p->next)|| j>i)    {        cout<<"删除的位置不对"<<endl;        return;    }    q=p->next;    p->next=q->next;    e=q->data;    free(q);}//打印单链表的数据void print(LinkList &L){    LNode *p;    p=L->next;    while(p)    {        cout<<p->data<<"    ";        p=p->next;    }}int main(int argc,char* argv[]){    LinkList L;    ElementType e;    int n;    cout<<"请输入需要创建的链表长度: "<<endl;    cin>>n;    cout<<"请输入"<<n<<"个数据: ";    init(L,n);    cout<<"创建的链表为: ";    print(L);    cout<<endl;    cout<<"请输入需要获取链表那个位置的元素: ";    cin>>n;    getElement(L,n,e);    cout<<"请输入要插入元素的位置和数据: ";    cin>>n;    cin>>e;    cout<<"插入后的单链表为:"<<endl;    insert(L,n,e);    print(L);        cout<<"请输入要删除元素的位置: ";    cin>>n;    delLink(L,n,e);    cout<<"删除后的单链表为:"<<endl;    print(L);        print(L);    cin>>n;    return OK;}

 

0 0