数据结构-链表

#include<stdio.h>
#include<malloc.h> 
#define MaxSize 10 
typedef int ElemType;//要加分号 


typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList; 

//创建操作有俩种:头插法和尾插法
//头插法 
LinkList createList1(LinkList &L){
    L = (LinkList)malloc(sizeof(LNode));//初始化一个节点 (头结点) 
    L->next = NULL;
    LNode *s;//该节点用来存放新节点的信息 
    int x;
    scanf("%d",&x);
    while(x<=9999){
        s = (LinkList)malloc(sizeof(LNode));
        s->data = x;
        s->next = L->next;
        L->next = s;
        scanf("%d",&x);
    }
    return L;
}

LinkList createList2(LinkList &L){
    int x;
    L = (LinkList)malloc(sizeof(LNode));//无论是头插法还是尾插法L指向的都是头结点 
    LNode *s,*r = L;//r初始值指向头结点,事后总是指向尾节点 
    scanf("%d",&x);
    while(x!=9999){
        s = (LinkList)malloc(sizeof(LNode));
        s->data = x;
        r->next = s;
        r = s;
        scanf("%d",&x);
    }
    r->next = NULL;//因为r节点是尾节点,所以他的下一个节点总是空节点 
    return L;
} 

//查询 按序号查询
LinkList getElemById(LinkList L,int i){
    int j = 1;
    LinkList p = L->next;
    if(i==0) return L;
    if(i<0) return NULL;
    //判断条件:p存在 j<i(很精髓 开始设置j = 1,并且把i = 0当成特殊情况处理 j小于i跳出循环是j = i) 
    while(p&&j<i){ 
        p = p->next;
        j++;
    }
    return p;
} 

//查找 按值查找
LinkList  getElemByValue(LinkList L,int e){
    LinkList p = L->next;
    while(p&&p->data!=e){
        p = p->next;
    }
    return p;
}

//插入 插入第i节点要找到第i-1个节点
void insertList(LinkList &L,int n,int d){
    LinkList p,s;
    s = (LinkList)malloc(sizeof(LNode));//必须要初始化 
    p = getElemById(L,n-1);//找到需要插入节点的前一个位置
    s->data = d;
    s->next = p->next;
    p->next = s;
} 
//删除节点
void deleteList(LinkList &L,int i){
    LinkList p,q,s;
    s = (LinkList)malloc(sizeof(LNode));//必须要初始化 
    p = getElemById(L,i-1);//找到需要插入节点的前一个位置
    q = p->next;
    p->next = q->next;
} 
//显示链表信息 
void show(LinkList L){
    LinkList p = L->next;
    while(p!=NULL){
        printf("%d   ",p->data);
        p = p->next;   
    }
}

int main(){ 
    LinkList L,find;
    //测试创建的俩种方法 
    //createList1(L);
    createList2(L);
    
    //测试按序号查找 
//    find = getElemById(L,3); 
//    printf("%d",find->data);

    //测试按值查询
//    find = getElemByValue(L,34); 
//    printf("%d",find->data);

    //测试插入节点 
//    insertList(L,3,56); 
//    show(L);

    //测试删除
    deleteList(L,2);
    show(L); 
    
} 

 

posted on 2019-06-26 16:06  楠楠要上天  阅读(143)  评论(0)    收藏  举报