小弟初学,看大家修改修改编程,链表的
小弟初学,望大家修改修改编程,链表的
设C={a1,b1,a2,b2,…,an,bn}为一线性表,采用带头结点的hc单链表存放,设计一个就地算法,将其拆分为两个线性表A={a1,a2,…,an}, B={b1,b2,…,bn},拆分后的线性表分别用带头结点的单链表存放。
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
void creat_LinkList(LinkList L,int n){
LNode *P;
printf("Please input the list:\n");
int i;
for(i=0;i<n;i++){
P=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(P->data));
P->next=L->next;
L->next=P;
}
}
void Depart_LinkList(LinkList L,int n){
LinkList La,Lb;
La=(LinkList)malloc(sizeof(ElemType));
La->data=NULL;
LNode *q;
Lb=(LinkList)malloc(sizeof(ElemType));
Lb->data=NULL;
LNode *P;
int i;
for(i=1;i<=n&&L->data;i++){
if(i%2){
q=(LNode *)malloc(sizeof(LNode));
P->next=La->next;
La->next=P;La->data=L->data; }
else {
P=(LNode *)malloc(sizeof(LNode));
P->next=Lb->next;
Lb->next=P;Lb->data=L->data; }
L=L->next;
}
printf("Now the list is departed into two list:\nLa= ");
while(La->data){
printf("%d\t",La->data);
La=La->next; }
printf("\nLb=: ")
while(Lb->data){
printf("%d\t",Lb->data);
Lb=Lb->next; }
}
void main()
{
LinkList L;
int n;
printf("Please input the length of the list:\n");
scanf("%d",&n);
L=(LinkList)malloc(sizeof(ElemType));
L->data=NULL;
creat_LinkList(L,n);
Depart_LinkList(L,n);
}
------解决方案--------------------
设C={a1,b1,a2,b2,…,an,bn}为一线性表,采用带头结点的hc单链表存放,设计一个就地算法,将其拆分为两个线性表A={a1,a2,…,an}, B={b1,b2,…,bn},拆分后的线性表分别用带头结点的单链表存放。
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
void creat_LinkList(LinkList L,int n){
LNode *P;
printf("Please input the list:\n");
int i;
for(i=0;i<n;i++){
P=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(P->data));
P->next=L->next;
L->next=P;
}
}
void Depart_LinkList(LinkList L,int n){
LinkList La,Lb;
La=(LinkList)malloc(sizeof(ElemType));
La->data=NULL;
LNode *q;
Lb=(LinkList)malloc(sizeof(ElemType));
Lb->data=NULL;
LNode *P;
int i;
for(i=1;i<=n&&L->data;i++){
if(i%2){
q=(LNode *)malloc(sizeof(LNode));
P->next=La->next;
La->next=P;La->data=L->data; }
else {
P=(LNode *)malloc(sizeof(LNode));
P->next=Lb->next;
Lb->next=P;Lb->data=L->data; }
L=L->next;
}
printf("Now the list is departed into two list:\nLa= ");
while(La->data){
printf("%d\t",La->data);
La=La->next; }
printf("\nLb=: ")
while(Lb->data){
printf("%d\t",Lb->data);
Lb=Lb->next; }
}
void main()
{
LinkList L;
int n;
printf("Please input the length of the list:\n");
scanf("%d",&n);
L=(LinkList)malloc(sizeof(ElemType));
L->data=NULL;
creat_LinkList(L,n);
Depart_LinkList(L,n);
}
------解决方案--------------------
- C/C++ code
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <errno.h> 5 6 typedef int Elemtype; 7 typedef struct node 8 { 9 Elemtype data; 10 struct node *next; 11 }Node, *LinkNode; 12 13 void create_nodes(LinkNode *h, int n); 14 void depart_link(LinkNode *La, LinkNode *Lb, LinkNode h); 15 void show_link(LinkNode p); 16 17 int main(int argc, char *argv[]) 18 { 19 int num = 0; 20 LinkNode head = NULL, La, Lb; 21 printf("Please input the length of link: "); 22 scanf("%d", &num); 23 printf("Create the link: \n"); 24 create_nodes(&head, num); 25 show_link(head); 26 La = (LinkNode)malloc(sizeof(Node)); 27 La->data = -1; 28 La->next = NULL; 29 Lb = (LinkNode)malloc(sizeof(Node)); 30 Lb->data = -1; 31 Lb->next = NULL; 32 depart_link(&La, &Lb, head); 33 printf("Show La list: "); 34 show_link(La); 35 printf("Show Lb list: "); 36 show_link(Lb); 37 38 return 0; 39 } 40 41 void create_nodes(LinkNode *h, int n) 42 { 43 int input = 0; 44 int i; 45 LinkNode p = *h, q; 46 47 for (i = 0; i < n; i++) 48 { 49 printf("Please input NO.%d:\n", i+1); 50 scanf("%d", &input); 51 if (*h == NULL) 52 { 53 *h = (LinkNode)malloc(sizeof(Node)); 54 (*h)->data = input; 55 (*h)->next = NULL; 56 p = *h; 57 } 58 else 59 { 60 q = (LinkNode)malloc(sizeof(Node)); 61 q->data = input; 62 q->next = NULL; 63 p->next = q; 64 p = p->next; 65 } 66 } 67 } 68 69 void depart_link(LinkNode *La, LinkNode *Lb, LinkNode h) 70 { 71 int i; 72 LinkNode p = h, q = NULL; 73 LinkNode s = *La, t = *Lb; 74 75 for (i = 1; p!= NULL; i++, p = p->next) 76 { 77 if (i % 2) 78 { 79 if (s->data == -1) 80 { 81 s->data = p->data; 82 } 83 else 84 { 85 q = (LinkNode)malloc(sizeof (Node)); 86 q->data = p->data; 87 q->next = NULL; 88 s->next = q; 89 s = s->next; 90 } 91 } 92 else 93 { 94 if (t->data == -1) 95 { 96 t->data = p->data; 97 } 98 else 99 { 100 q = (LinkNode)malloc(sizeof (Node)); 101 q->data = p->data; 102 q->next = NULL; 103 t->next = q; 104 t = t->next; 105 } 106 } 107 } 108 } 109 110 void show_link(LinkNode p) 111 { 112 while (p != NULL) 113 { 114 fprintf(stdout, " %d\t", p->data); 115 p = p->next; 116 } 117 putchar('\n'); 118 }