别人的代码我运行不出来

发的文件main. c运行出来是这个样子的,但在的项目里面又运行的出来,的复制粘贴过来我项目里也没有运行出来,请问是什么问题

img

img

img


#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef int* Elemtype;
#define overflow -2
#define error -1

typedef int Elemtype;

/*双链表链表结点结构体定义*/
typedef struct DuLNode{
    Elemtype data;                           //数据域
    struct DuLNode *prior;                   //指针域,指向前驱 
    struct DuLNode *next;                    //指针域,指向后继 
}DuLNode,*DuLinkList; 

/*尾插法,建立双向循环链表*/
void CreateListR(DuLinkList *DL, int n){
    /************头结点*************/ 
    *DL = (DuLNode*)malloc(sizeof(DuLNode));
    if(!(*DL)) exit(overflow);
    (*DL)->prior = NULL;
    (*DL)->next = NULL;
    /************头结点*************/ 
    
    int i;
    DuLinkList DR;
    DR=*DL;     //DR指向尾结点 
    /************循环建立新结点,并将新结点尾插在当前尾结点后*************/ 
    for(i=0;i<n;i++){
        DuLinkList DP;
        DP = (DuLNode*)malloc(sizeof(DuLNode));
        if(!DP) exit(overflow);
        DP->data = i+1;
        DP->prior = DR;    //尾插操作序列 
        DR->next = DP;
        DR = DP;
    } 
    /************循环建立新结点,并将新结点尾插在当前尾结点后*************/ 
    
    /************建立循环链表,尾结点next域指向头结点,头结点prior域指向尾结点*************/ 
    DR->next = (*DL);
    (*DL)->prior = DR; 
    /************建立循环链表,尾结点next域指向头结点,头结点prior域指向尾结点*************/
}


/*遍历双向循环链表,返回链表长度*/
int ListTraverse(DuLinkList DL){
    /*************判断链表是否为空,请思考下判断双循环链表是否为空的条件*************/ 
    if(DL->next == DL || DL->prior == DL) {
        printf("DuLinkList is NULL\n");
        return 0;
    } 
    /*************判断链表是否为空,请思考下判断双循环链表是否为空的条件*************/ 
    
    int length = 0;
    printf(" DuLinkList is:\n"); 
    DuLinkList DR = DL->next;
    
    /*************DR向后遍历链表,打印数据,请思考下循环结束的条件*************/
    while(!(DR == DL)){
        printf("%d\t",DR->data);
        DR=DR->next;
        length++;
    }
    /*************DR向后遍历链表,打印数据,请思考下循环结束的条件*************/
    printf("\n");
    return length;
} 


/*设以带头结点的双向循环链表表示的线性表为L=(a1,a2,a3,…,an)。
试写一时间复杂度O(n)的算法,将L改造为L=(a1,a3,…,an,…,a4,a2)。*/
void ListTransform(DuLinkList *DL,int ListLength){
    /*************判断链表是否为空,判断链表长度是否小于等于2,若满足则不做修改*************/
    if( (*DL) == NULL || (*DL)->next == DL || (*DL)->prior == DL) return;
    if(ListLength ==1 || ListLength==2 )return;
    /*************判断链表是否为空,判断链表长度是否小于等于2,若满足则不做修改*************/
    
    DuLinkList DP,DQ,DR,DW;//DP指向第1个结点,DQ指向第2个结点,DR指向奇数结点,DW指向偶数结点 
    
    /*************将尾结点的next域断开,是否需要断开呢?*************/ 
    (*DL)->prior->next = NULL;
    (*DL)->prior = NULL;
    /*************将尾结点的next域断开,是否需要断开呢?*************/
    
    /*************断开链表,只保留头结点后的两个结点DP和DQ,
    并用DR保留第三个结点后的链表*************/
    DP = (*DL)->next; DQ = DP->next; DR = DQ->next; 
    DQ->next = (*DL); (*DL)->prior = DQ;
    DP->next = NULL; DQ->prior = NULL; DR->prior = NULL; //断开DP和DQ 
    /*************断开链表,只保留头结点后的两个结点DP和DQ,
    并用DR保留第三个结点后的链表*************/
    
    /*************遍历第三个结点后的链表数据,奇数结点尾插至DP后面,
    偶数结点头插至DQ前面*************/
    while(!(DR == NULL)){
        /*************更新DW**************/ 
        DW=NULL;     //这是关键一步,同学们思考下如果没有这步会发生什么情况 
        if(!(DR->next==NULL)) {
            DW=DR->next;
        }
        /*************更新DW**************/ 
        
        /*************DR尾插至DP之后**************/ 
         DR->next = NULL;
         DR->prior = DP;
         DP->next = DR;
         DP=DR;
         /*************DR尾插至DP之后**************/ 
         
         /*************DW头插至DQ之前,并更新DR**************/ 
         if(!(DW==NULL)){
             DR = DW->next;
             DW->prior = NULL;
             DW->next = DQ;
             DQ->prior = DW;
             DQ=DW;
         }else{
             DR = NULL;
         }
         /*************DW头插至DQ之前,并更新DR**************/ 
    }
    /*************遍历第三个结点后的链表数据,奇数结点尾插至DP后面,
    偶数结点头插至DQ前面*************/
    
    DP->next = DQ; DQ->prior = DP;//连接DP和DQ 
} 


int main(int argc, char *argv[]) {
    DuLinkList DL;
    printf("\n************************建立双循环链表**************************\n");
    CreateListR(&DL,9);
    int ListLength = ListTraverse(DL);
    printf("\n************************变换双循环链表**************************\n");
    ListTransform(&DL,ListLength);
    ListTraverse(DL);
    return 0;
}

img