一个关于大型数据的输入
有一个很大数据,可能是好几千位的数据,然后把它拆分开一个一个位数,然后按顺序每一位存放在链表的一个结点里面。但是我能力有限,用了很多的方法还是没有实现这样的功能,求求各位大虾们用C语言帮我实现实现下。
问题补充:
输入:123456789
将 1 存放在链表的第一个结点里, 2 放在链表的第二个结点中,以此类推,最后的链表如下:
head -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 ->9
请各位大虾们帮帮忙,谢谢!
[解决办法]
定义一个char类型数组,将目标大数存放进数组中,然后循环将其每一个元素转化成整形存入链表中。
链表要是不会,就自己看书吧。
[解决办法]
1.123456789%10=9
2.123456789/10=12345678
依次执行1,2步骤,得到最末尾的数
然后用头插法插入链表
[解决办法]
这种数据是文件类型的?还是其他呢?
[解决办法]
几千位的数据,怎么存?
#include<iostream>#include<string>using namespace std;typedef struct node{ char data; struct node *next;}node;int main(){ char ch[10000]; //应该可以满足LZ要求 cin >> ch; int i; int len = strlen(ch); node *head = (node *)malloc(sizeof(node)); head->next=NULL; for(i=0;i<len;i++) { node *q = head; node *p = (node *)malloc(sizeof(node)); p->data=ch[i]; while(q->next) { q = q->next; } q->next=p; p->next=NULL; } while(head->next) { cout<<head->next->data; head = head->next; } cout<<endl; return 0;}
[解决办法]
无需动态分配内存啦,何必浪费原来的数组呢,读入数据的时候就可以构建“数组链表”了,嘿嘿
#include <stdio.h>typedef struct _arr_link{ char ch; struct _arr_link* next;} TArrLink, *PTArrLink;void prn_arrlink(PTArrLink phdr){ PTArrLink ptr = phdr->next; while(ptr) { printf("%c", ptr->ch); ptr = ptr->next; } printf("\n");}int main(void){ TArrLink chlink[10000] = { 0 }; int i = 0; while(scanf("%c", &chlink[i].ch) != EOF) { if(0x0a == chlink[i].ch) break; if(++i >= 10000) break; chlink[i - 1].next = &chlink[i - 1] + 1; } TArrLink linkHdr = { 0 }; linkHdr.next = chlink; prn_arrlink(&linkHdr); fflush(stdin); getchar(); return 0;}
[解决办法]
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct node{ char data; struct node *next;}linkNode, *linklist;/**功能:初始化链表*返回值:链表首地址*/linklist initList(){ linklist head; head = (linklist)malloc(sizeof(linkNode)); if(head == NULL) return NULL; head->next = NULL; return head;}/**功能:输出链表数据*参数:链表首地址*/void printList(linklist head){ if(head == NULL || head->next == NULL) return; head = head->next; printf("\nlinklist:\n"); while(head != NULL) { printf("%c ", head->data); head = head->next; } printf("\n");}/**功能:申请空间*参数:结点(数据)*返回值:指向结点的指针*/linklist makeNode(linkNode nodeData){ linklist newNode; newNode = (linklist)malloc(sizeof(linkNode)); if(newNode == NULL) return NULL; newNode->data = nodeData.data; return newNode;}/**功能:在链表尾部插入结点*参数:链表首地址,待插入结点地址*/void pushBack(linklist head, linklist insertNode){ if(head == NULL) return; while(head->next != NULL) { head = head->next; } head->next = insertNode; insertNode->next = NULL;}int main(){ linklist list, insertNode; linkNode newNode; list = initList(); while(1) { scanf("%c", &newNode.data); if(newNode.data == '\n') break; insertNode = makeNode(newNode); pushBack(list, insertNode); } printList(list); system("pause"); return 0;}
[解决办法]
看书走。。。。