数据结构上机练习(2) 单链表

来源:互联网 发布:python 作图 编辑:程序博客网 时间:2024/06/05 16:15
#include "stdafx.h"#include "stdlib.h"#include "malloc.h"#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef char ElemType;typedef struct LNode{    ElemType data;    struct LNode *next;}LNode,*LinkList;void CreateList_L(LinkList &L,int n){    LinkList p;    int i;    L = (LinkList)malloc(sizeof(LNode));    L->next = NULL;    for (i = n; i > 0;--i){        p = (LinkList)malloc(sizeof(LNode));        scanf_s("%d", &p->data);        p->next = L->next;        L->next = p;    }}Status InsertList_L(LinkList L, int i, ElemType e){    LinkList p, s;    int j = 0;    p = L;    while(p && j<i-1){        p = p->next;        ++j;    }    if (!p || j>i - 1)        return ERROR;    s = (LinkList)malloc(sizeof(LNode));    s->data = e;    s->next = p->next;    p->next = s;    return OK;}Status DeleteList_L(LinkList &L, int i, ElemType &e){    LinkList p, q;    int j = 0;    p = L;    while(p->next && j<i-1){        p = p->next;        ++j;    }    if (!(p->next) || j>i - 1)        return ERROR;    q = p->next;    p->next = q->next;    e = q->data;    free(q);    return OK;}Status GetElem_L(LinkList L, int i, ElemType &e){    LinkList p;    int j = 1;    p = L->next;    while(p || j<i){        p = p->next;        ++j;    }    if (!p || j>i)        return ERROR;    e = p->data;    return OK;}void display(LinkList L) {    LinkList p;    p = L->next;    while (p){        printf("%d", p->data);        p = p->next;    }    printf("\n");}void MergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc) {    LinkList pa, pb, pc;    pa = La->next;    pb = Lb->next;    Lc = pc = La;    while(pa && pb)        if(pa->data <= pb->data){            pc->next = pa;            pc = pa;            pa = pa->next;        }else{            pc->next = pb;            pc = pb;            pb = pb->next;        }    pc->next = pa ? pa : pb;    free(Lb);}int main() {    LinkList L;         CreateList_L(L, 3);    display(L);    InsertList_L(L, 2, 100);    display(L);    ElemType e;    DeleteList_L(L, 2, e);    display(L);    printf("被删除的值=%d\n", e);    GetElem_L(L, 3, e);    printf("获取的值=%d\n", e);    LinkList Lb,Lc;    CreateList_L(Lb, 2);    display(Lb);    printf("合并后\n");    MergeList_L(L, Lb, Lc);    display(Lc);    getchar();    getchar();    return 0;}
0 0
原创粉丝点击