有序链表的插入

来源:互联网 发布:2015java面试宝典下载 编辑:程序博客网 时间:2024/05/21 12:09

7-1 有序链表的插入(20 分)

已知一个递增有序链表L(带头结点,元素为整数),编写程序将一个新整数插入到L中,并保持L的有序性。其中单链表的类型定义参考如下:

typedef int elementType;

typedef struct lnode

{ elementType data;

struct lnode *next;

}Lnode,* LinkList;

输入格式:

输入分三行

第一行 元素个数

第二行 元素的值,元素间用空格分隔。

第三行 待插入的元素值

输出格式:

在一行中输出有序链表元素值,每个元素前输出一个空格以便与相邻元素分隔。

输入样例:

51 3 5 7 94

输出样例:

 1 3 4 5 7 9
以下为代码:

#include <stdio.h>#include <stdlib.h>//函数状态码定义#define TRUE        1#define FALSE       0#define OK          1#define ERROR       0#define INFEASIBLE -1#define OVERFLOW   -2typedef int Status;typedef int ElemType;typedef struct LNode{    ElemType data;    struct LNode *next;}LNode, *LinkList;//单链表的结构体定义Status LinkListCreate_CL(LinkList &CL);void ListPrint_CL(LinkList CL);Status LinkListInsert_CL(LinkList &CL,ElemType e);Status LinkListCreate_CL(LinkList &CL){    LNode *curPtr, *rearPtr;    CL = (LNode*)malloc(sizeof(LNode));    if(!CL)        exit(OVERFLOW);    CL->next = NULL;    curPtr = CL;    rearPtr = CL;    //头节点的尾指针和当前指针都指向头节点    int TheNumberOfElement;    scanf("%d", &TheNumberOfElement);    for(int i = 0; i < TheNumberOfElement; i++)    {        curPtr = (LNode*)malloc(sizeof(LNode));        if(!curPtr)            exit(OVERFLOW);        scanf("%d", &curPtr->data);        rearPtr->next = curPtr;        rearPtr = curPtr;//连接节点    }    rearPtr->next = NULL;//最后一个节点的尾指针赋空    return OK;}void ListPrint_CL(LinkList CL){    LNode *p = CL->next;    while(p)    {        printf("%d ", p->data);        p = p->next;    }    printf("\n");}Status LinkListInsert_CL(LinkList &CL,ElemType e){    LNode *curPtr = CL->next, *rearPtr = CL, *temPtr;    temPtr = (LNode*)malloc(sizeof(LNode));    if(!temPtr)        exit(OVERFLOW);    temPtr->data = e;    temPtr->next = NULL;    if(curPtr == NULL)    {        rearPtr->next = temPtr;        temPtr->next = NULL;        return OK;    }    while(curPtr)    {        if(curPtr->data >= e)        {            rearPtr->next = temPtr;            temPtr->next = curPtr;            return OK;        }        rearPtr = curPtr;        curPtr = curPtr->next;    }    curPtr->next = temPtr;    temPtr->next = curPtr;    return OK;}int main(){    LinkList CL;    ElemType elem;    if(LinkListCreate_CL(CL) != OK)    {        printf("InitList_Sq: 初始化失败!!!\n");        return -1;    }    scanf("%d", &elem);    LinkListInsert_CL(CL,elem);    ListPrint_CL(CL);    return 0;}



原创粉丝点击