// 2019-03-11
长期置顶:欢迎大家挑错(友好地)(以及不友好地)……大家请直接在评论区发言(喷),请不要私信我,作业好多…… 还有是请注意公告内容,注意学术诚信,严格遵守我国法律,……(略去10^100字)
—————————————我是分割线—————————————
我这写的是啥……
我的 文件/代码 去哪里了……
我的作业去哪里……
能给我个和……聊天的时间吗……太真实了!!
竟然因为含有meizi这个单词,而不能发布更新,太真实了!!
a w s l
—————————————我是分割线—————————————
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INPUT_STOP_SIGNAL (-1)
struct ListNode{
long long data;
ListNode* next=NULL;
};
void malloc_error_report(void){//malloc错误报告;
printf("Memory allocation failed!\nPlease check it again to find the reason which may be too much data input!\n");
}
void other_error_report(void){//其他错误报告;
printf("There may be an error in the code. Please check it again and try to debug it!\nGood luck to you!\n");
}
// FIFO 队列 追加方式创建链表————将新加入元素插到链表尾部;
void create_one_listNode(ListNode** headPtr,ListNode** presentPtr,long long num){//创建一个节点;(对头指针和尾指针采用传引用方式);
ListNode *ptr=NULL;//声明变量,用于进行新节点的申请;
if ((*headPtr)==NULL){//如果头指针指向空类型,那么,之前必是空表;
ptr=(ListNode*)malloc(sizeof(ListNode));//申请,并用临时指针ptr指向;
if (ptr==NULL){ //如果申请失败,打印错误报告;
malloc_error_report();
}
else{ //否则,即如果申请成功;
(*headPtr)=ptr; //将该指针指向位置赋值给 头指针;
(*headPtr)->data=num; //将数据存入 头部节点的数据域中;
(*presentPtr)=(*headPtr);//现在的List不在是empty List,所以将尾部指针指向最后一个节点(由于只有一个节点,所以也就是头节点);
}
}
else{
ptr=(ListNode*)malloc(sizeof(ListNode)); //申请,并用临时指针ptr指向;
if (ptr==NULL){ //如果申请失败,打印错误报告;
malloc_error_report();
}
else{ //否则,即如果申请成功;
(*presentPtr)->next=ptr; //将下一个节点的实际位置赋给presentPtr的指针域;
(*presentPtr)=(*presentPtr)->next; //将尾指针指向下一个节点;
(*presentPtr)->data=num; //将数据存入 最后一个节点的 数据域中;
}
}
}
// LIFO 插入方式创建链表————将新加入元素插到链表头部;
void create_one_listNode_LIFO(ListNode** headPtr,ListNode** lastPtr,long long num){//创建一个节点;(对头指针和尾指针采用传引用方式);
ListNode *ptr=NULL;//声明变量,用于进行新节点的申请;
if ((*lastPtr)==NULL){//如果尾部指针指向空类型,那么,之前必是空表;
ptr=(ListNode*)malloc(sizeof(ListNode));//申请,并用临时指针ptr指向;
if (ptr==NULL){ //如果申请失败,打印错误报告;
malloc_error_report();
}
else{ //否则,即如果申请成功;
*lastPtr=ptr;
(*lastPtr)->data=num;
(*headPtr)=(*lastPtr);
}
}
else{
ptr=(ListNode*)malloc(sizeof(ListNode)); //申请,并用临时指针ptr指向;
if (ptr==NULL){ //如果申请失败,打印错误报告;
malloc_error_report();
}
else{ //否则,即如果申请成功;
ptr->next=(*headPtr);
(*headPtr)=ptr;
(*headPtr)->data=num;
}
}
}
ListNode* input_data(ListNode* headPtr){//处理输入数据,并将其存入一个链表中;
ListNode* ptr=NULL,*presentPtr=NULL;
long long num;
scanf("%lld",&num);//逐个输入数据;
while (num != INPUT_STOP_SIGNAL){//如果输入数据不为-1,就创建一个新的节点,然后将数据储存进去;
create_one_listNode_LIFO(&headPtr,&presentPtr,num);//创建一个新的节点,并储存数据;
scanf("%lld",&num);//读入下一个数据;
}
return headPtr;//返回链表的头指针;
}
void show_one_list(ListNode* headPtr){
ListNode *ptr=headPtr;
while(ptr != NULL){
printf("%lld ",ptr->data);
ptr=ptr->next;
}
printf("\n");
}
int main(){
printf("Please input a list(end by -1):");
ListNode *headPtr=NULL;//相当于创建一个空表(只有头指针,没有尾指针);
headPtr=input_data(headPtr);//处理输入信息,假设处理的输入信息都是以「标准输入」实现的;
printf("The list you have just inputted is:");
show_one_list(headPtr); // If you wanna take a look at it…… o(^_^)o ……
return 0;
}
网友评论