데이터 구조 재 미 있 는 문제 - 원 표 공간 에서 링크 의 병합 을 진행 합 니 다.
15317 단어 데이터 구조
1: #include <stdio.h>
2: #include <stdlib.h>
3:
4: /* int ElemType */
5: typedef int ElemType;
6:
7: /* */
8: typedef struct node {
9: ElemType data; /* */
10: struct node *next; /* */
11: } LNode, *LinkList;
12:
13: /* n , */
14: LinkList GreatLinkList(int n) {
15: LinkList p, r, list = NULL;
16: ElemType e;
17: int i;
18:
19: for(i = 1; i <= n; i++) {
20: scanf("%d", &e);
21: p = (LinkList)malloc(sizeof(LNode));
22: p->data = e;
23: p->next = NULL;
24:
25: if(!list)
26: list = p;
27: else
28: r->next = p;
29:
30: r = p;
31: }
32:
33: return list;
34: }
35:
36: /* , e*/
37: void insertList(LinkList *list, LinkList q, ElemType e) {
38: LinkList p;
39: p = ( LinkList)malloc(sizeof(LNode));
40: p->data = e;
41:
42: if(!*list) {
43: *list = p;
44: p->next = NULL;
45: }
46: else {
47: p->next = q->next;
48: q->next = p;
49: }
50: }
51:
52: void insertNode(LinkList *q1, LinkList *q2, LinkList *p, LinkList *l2) {
53: if(*q1 == *q2)
54: {
55: (*p)->next = *q2;
56: *l2 = *q2 = *q1 = *p;
57:
58: }
59: else
60: {
61: (*q2)->next = *p;
62: (*p)->next = *q1;
63: (*q2) = (*q2)->next;
64: }
65: }
66:
67: void MergeLink(LinkList l1, LinkList l2 , LinkList *l3)
68: {
69: /* l1,l2 ,l3 */
70: LinkList p, q1, q2;
71: q1 = q2 = l2; /*l3 l2*/
72: p = l1;
73:
74: while(p != NULL && q1 != NULL) {
75: if(p->data >= q1->data) {
76: q2 = q1;
77: q1 = q1->next;
78: }
79: else {
80: l1 = l1->next ;
81: insertNode(&q1, &q2, &p, &l2); /* p q2 q1 */
82: // q2 = q2->next;
83: p = l1;
84: }
85: }
86:
87: if(q1 == NULL) q2->next = p;
88:
89: *l3 = l2;
90:
91:
92: }
93:
94: int main()
95: {
96: ElemType e;
97: LinkList l1, l2, l3, q;
98:
99: printf("Please input the contents of Link1
");
100: q = l1 = GreatLinkList(1); /* ,q l */
101:
102: scanf("%d", &e);
103:
104: while(e) /* , */
105: {
106: insertList(&l1, q, e) ;
107: q = q->next;
108: scanf("%d", &e);
109: }
110:
111: printf("Please input the contents of Link2
");
112: q = l2 = GreatLinkList(1); /* ,q l */
113:
114: scanf("%d", &e);
115:
116: while(e) /* , */
117: {
118: insertList(&l2, q, e) ;
119: q = q->next;
120: scanf("%d", &e);
121: }
122:
123: MergeLink(l1, l2, &l3); /* l2,l2 l3 */
124:
125: q = l3;
126:
127: printf("The merge of link1 and link 2 is
");
128:
129: while(q) /* */
130: {
131: printf("%d ", q->data) ;
132: q = q->next;
133: }
134: }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.