首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

生手,求大侠编个链表

2012-06-23 
新手,求大侠编个链表输入两个数列(以某数为结束标志),分别生成递增有序单链表,再合成一个递增有序单链表,

新手,求大侠编个链表
输入两个数列(以某数为结束标志),分别生成递增有序单链表,再合成一个递增有序单链表,输出表中的各个结点,求表的长度值

[解决办法]

C/C++ code
#include<stdio.h>#include<malloc.h>struct list{    int data;    struct list *next;    };//插入数据函数list * Input_a(){     int num, a;    int b ;    b = -1;    list *head, *p ,*r;    head = NULL;    r = NULL;    printf("插入数据\n");    printf("输入插入数据的个数:\n");    scanf("%d", &num);                for(a = 0; a < num; a++ )    {                 b = b + 2;        p = (list *) malloc(sizeof(list));        if(head == NULL)            head = p;        else            r->next = p;                p->data = b;                        r = p;    }    if(r != NULL)        r->next = NULL;    return head;    }//插入数据函数list * Input_b(){     int num, a;    int b ;    b = 0;    list *head, *p ,*r;    head = NULL;    r = NULL;    printf("插入数据\n");    printf("输入插入数据的个数:\n");    scanf("%d", &num);                for(a = 0; a < num; a++ )    {                 b = b + 2;        p = (list *) malloc(sizeof(list));        if(head == NULL)            head = p;        else            r->next = p;                p->data = b;                        r = p;    }    if(r != NULL)        r->next = NULL;    return head;    }// 查找当前结点的指针 函数list *Find(list *head){    int a, b;    b = 1;     list *p;    p = head;    printf("输入要搜索的数据指针位置:\n");    scanf("%d", &a);        while(p->next != NULL && b <= a)    {         if(a == b)        {              printf("找到了当前结点的指针! \n");            break;        }                else        {            p = p->next;            b++;        }    }    printf("当前结点的数据是:%d \n", p->data);    return p;} //输出函数list * Output(list *tail){     printf("链表中的值是:\n");    while(tail != NULL)    {         printf("%d \n",tail->data);        tail = tail->next;            }    return 0;    }/*  // 增序链表void main(){list *p, *q, *r,*head;p = Input_a();q = Input_b();Output(p);Output(q);head = p;      while(p != NULL && q != NULL)    {    if(p->data < q->data)    {      r = p;      p = p->next;      r->next = q;          }    else    {        r = q;        q = q->next;        r->next = p;              }                }    //free(r);   Output(head);}// 主要算法 用一个指针变量 记录 上一个最小值 另一个变量 记录当前最小值 void main(){    list *p, *q, *r,*j;  // r表示上一个最小值 j表示当前最小值        p = Input_a();      q =  Input_b();    Output(p);    Output(q);    r = (list *) malloc(sizeof(list));    r = NULL;        while(p != NULL && q != NULL)    {        if(p->data < q->data)        {             j = p;            p = p->next;                    }        else        {            j = q;            q = q->next;                    }                j->next = r;        r = j;    }     /*    q->next = r;       Output(q);    */    // 逻辑清晰的分析 if else !/*        if(p != NULL)    {        while(p != NULL)        {            j = p;            p = p->next;            j->next = r;   // r 指向上一个最小值            r = j;                                }            }        else        if(q != NULL)        {            while(q != NULL)            {                j = q;                q = q->next;                j->next = r;                r = j;                            }                    }            Output(j);        }void main(){  list *p , *q, *r,*head;   int ch;  q = (list *) malloc(sizeof(list));  p = Input_a();  head = p;  Output(p);  printf("输入要插入的值:\n");  scanf("%d", &ch);  q->data  = ch; // printf("33");  while(ch > p->data)  {       r = p;     p = p->next;       }  q->next = r->next;  r->next = q;  Output(head);      }*/struct lists{ char data; struct lists *next;};// 带头结点的单链表lists *Inputs(){  lists *head, *p, *r;  char ch;  int num;  num = 0;  head = (lists *) malloc(sizeof(lists));  r = head;  printf("输入数据“#”结束:\n");  ch = getchar();  while(ch != '#')  {     num++;    p = (lists *) malloc(sizeof(lists));    p->data = ch;    r->next = p;    r = p;   // 下一次使用r->next         ch = getchar();  //从输入流中读取一个 字符  }   head->data = num;   r->next = NULL;   return head;}void Outputs(lists *tail){     printf("链表中的值是:\n");    while(tail != NULL)    {           printf("%c \n",tail->data);        tail = tail->next;            }}void Len(lists *head){  printf("链表中共有%d个值\n",head->data);}void main(){   lists *m;   m = Inputs();   Outputs(m);   Len(m);} 


[解决办法]

探讨
C/C++ code


#include<stdio.h>
#include<malloc.h>

struct list
{
int data;
struct list *next;

};


//插入数据函数
list * Input_a()
{
int num, a;
int b ;
b = -1;
……

热点排行