1.基本概念
线性表:n个数据类型相同元素的有限序列。(比如矩阵,数组,字符串,堆栈,队列等)。
特点:第一个元素无直接前趋,最后一个元素无直接后继,其余元素都有一个直接前趋和一个直接后继。
存储结构:线性存储结构,链式存储结构。
2.练习
(1)两个递增顺序表(顺序存储),la,lb,顺序插入顺序表lc中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 |
#include <stdio.h> #include <stdlib.h> #define SIZE 6 #define END 9999 #define CHARGE 0 typedef int
ElemType; typedef struct
list { ElemType elem[15]; int
last; } SeqList; void
initList(SeqList *l) { int
index = 0; int
midleVarile = 0; printf( "if you want to exit please input 9999\n" ); printf( "please input intger:" ); while (1) { scanf( "%d" , &midleVarile); if (midleVarile == END) { break ; } else { l->elem[index] = midleVarile; } index++; // fflush(stdin); } l->last = index; } void
mergeList(SeqList *l1, SeqList *l2, SeqList *l3) { int
index1 = 0; int
index2 = 0; int
index3 = 0; int
midleInt = 0; while ((index1 != (l1->last)) && (index2 != (l2->last))) { if (l1->elem[index1] <= l2->elem[index2]) { midleInt = l1->elem[index1]; l3->elem[index3] = midleInt; index1++; index3++; } else { midleInt = l2->elem[index2]; l3->elem[index3] = midleInt; index2++; index3++; } } if (index1 == (l1->last)) { for ( ; index2 != (l2->last); index2++, index3++) { l3->elem[index3] = l2->elem[index2]; } } else { for (; index1 != (l1->last); index1++, index3++) { l3->elem[index3] = l1->elem[index1]; } } l3->last = l1->last + l2->last; } void
outList(SeqList *l) { int
index = 0; int
i; for (i = 0; i < l->last; i++) { printf( "%d " , l->elem[i]); } } int
main() { SeqList l1; SeqList l2; SeqList l3; initList(&l1); initList(&l2); mergeList(&l1, &l2, &l3); outList(&l3); } |
(2)代码功能如下,后期会继续增加,当作复习用。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define OK 1 5 #define ERROR 0 6 #define OVERFLOW -2 7 8 typedef int ElemType; 9 10 typedef struct Node 11 { 12 ElemType data; 13 struct Node *next; 14 } Node, *LinkList; 15 16 // 创建新链表 17 Node * NewLinkList() 18 { 19 Node *node = (Node *)malloc(sizeof(Node)); 20 node->next = NULL; 21 return node; 22 } 23 24 //初始化链表 25 void InitLinkList(LinkList l) 26 { 27 // Node * l1; 28 int midleInt = 0; 29 30 printf("please input intger end with 9999:"); 31 32 while(midleInt != 9999) 33 { 34 scanf("%d", &midleInt); 35 l->next = (Node *)malloc(sizeof(Node)); 36 l = l->next; 37 l->next = NULL; 38 l->data = midleInt; 39 } 40 } 41 42 //得到链表的长度 43 unsigned int getListLength(LinkList l) 44 { 45 int lLength = 0; 46 47 l = l->next; 48 49 if(l == NULL) 50 return 0; 51 52 while(l != NULL) 53 { 54 lLength++; 55 l = l->next; 56 } 57 58 return lLength; 59 } 60 61 //链表的反转 62 LinkList ReverseList(LinkList l) 63 { 64 LinkList l1 = NewLinkList(); 65 LinkList l2; 66 LinkList l3 = l; 67 68 69 if((l->next == NULL) || (l->next->next == NULL)) 70 return l; 71 72 l = l->next; 73 74 while(l != NULL) 75 { 76 l2 = l1->next; 77 l3 = l->next; 78 l1->next = l; 79 l->next = l2; 80 l = l3; 81 } 82 83 return l1; 84 } 85 86 //链表清空 87 void LinkListClear(LinkList l) 88 { 89 l->next = NULL; 90 } 91 92 //链表是否为空 93 int LinkListisEmpty(LinkList l) 94 { 95 if(l->next == NULL) 96 return 1; 97 else 98 return 0; 99 } 100 101 //链表遍历 102 void LinkListTraverse(LinkList l) 103 { 104 // LinkList l1 = l; 105 l = l->next; 106 107 while(l != NULL) 108 { 109 printf("%d ", l->data); 110 111 l = l->next; 112 } 113 printf("\n"); 114 } 115 116 int main(void) 117 { 118 LinkList l = NewLinkList(); 119 InitLinkList(l); 120 LinkListTraverse(l); 121 l = ReverseList(l); 122 LinkListTraverse(l); 123 }
后面会继续增加
原文:http://www.cnblogs.com/xiongge/p/3577417.html