逻辑:线性,树形,图,集合
(1)线性结构:线性结构中,元素间的关系就是一对一,顾名思义,一条线性的结构。线性表,栈,队列
(2)树形结构:树形结构中,元素间的关系就是一对多,一颗大叔,伸展出的枝叶,也是类金字塔形。
(3)图形结构:图形结构中,元素间的关系就是多对多,举例:一个人可以通过6个人间接认识到世界上的每一个人。类蛛网形。
(4)集合结构 : 集合结构中的元素关系,除了同属于一个集合这个关系以外,再无其他关系。
物理:顺序--> arr,链式--> *
线性:顺序,链表
单链表:带头,无头,循环
树(递归):
图:
顺序存储线性表的实现
main.c
#include <stdio.h>
2 #include <stdlib.h>
3 #include "sqlist.h"
4
5 int main()
6 {
7 sqlist *list,*list1=NULL,*list2=NULL;
8 datatype arr[]={12,23,34,45,56};
9 datatype arr1[]={1235,623,34,445,56};
10 int i,err,err1;
11
12 list = sqlist_create();
13 // sqlist_create1(&list);
14 if(list == NULL)
15 {
16 fprintf(stderr,"sqlist_create()failed!\n");
17 exit(1);
18 }
19
20 list1 = sqlist_create();
21 // sqlist_create1(&list1);
22 if(list1 == NULL)
23 {
24 fprintf(stderr,"sqlist_create()failed!\n");
25 exit(1);
26 }
27
28 for(i=0;i<sizeof(arr)/sizeof(*arr);i++)
29 {
30 if((err = sqlist_insert(list,0,&arr[i]))!=0)
31 {
32 if(err == -1)
33 fprintf(stderr,"The arr is full.\n");
34 else if(err == -2)
35 fprintf(stderr,"The positon you want to insert is wrong.\n");
36 else
37 fprintf(stderr,"Error.\n");
38 exit(1);
39 }
40 }
41
42
43 for(i=0;i<sizeof(arr1)/sizeof(*arr1);i++)
44 {
45 if((err1 = sqlist_insert(list1,0,&arr1[i]))!=0)
46 {
47 if(err1 == -1)
48 fprintf(stderr,"The arr is full.\n");
49 else if(err1 == -2)
50 fprintf(stderr,"The positon you want to insert is wrong.\n");
51 else
52 fprintf(stderr,"Error.\n");
53 exit(1);
54 }
55 }
56
57 printf("=====\n");
58 sqlist_display(list);
59 printf("=====\n");
60 sqlist_display(list1);
61 printf("=====\n");
62 sqlist_union(list,list1);
63 printf("=====\n");
64 sqlist_display(list);
65 #if 0
66 sqlist_delete(list,1);
67
68 sqlist_display(list);
69 #endif
70
71 sqlist_destroy(list);
72 sqlist_destroy(list1);
73
74 exit(0);
75 }
sqlist.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "sqlist.h"
4
5 sqlist *sqlist_create()
6 {
7 sqlist *me;
8
9 me = malloc(sizeof(*me));
10 if(me ==NULL)
11 return NULL;
12 me->last = -1;
13
14 return me;
15 }
16
17 void sqlist_create1(sqlist **ptr)
18 {
19 *ptr = malloc(sizeof(**ptr));
20 if(*ptr == NULL)
21 return ;
22 (*ptr)->last = -1;
23 return ;
24 }
25
26 int sqlist_insert(sqlist *me ,int i,datatype *data)
27 {
28
29 printf("insert\n");
30 int j;
31 if(me -> last == DATASIZE -1)
32 return -1;
33 if(i<0 || i> me ->last +1)
34 return -2;
35 for(j = me ->last;i<=j;j--)
36 me ->data[j+1] = me ->data[j];
37 me ->data[i] = *data;
38 me ->last++;
39 return 0;
40 }
41
42 int sqlist_delete(sqlist *me,int i)
43 {
44 if(i < 0||i>me->last)
45 return -1;
46 for(; i < me -> last;i++)
47 {
48 me->data[i-1] = me ->data[i];
49 }
50 me -> last--;
51 return 0;
52 }
53
54 int sqlist_find(sqlist *me,datatype *data)
55 {
56 printf(" %d find \n",me->last);
57 int i=0;
58 if(sqlist_isempty(me) == 0)
59 return -1;
60 for(;i< me -> last;i++)
61 if(me->data[i]== *data)
62 {
63
64 printf(" %d find %d %d\n",me->last,i,me->data[i]);
65 return i;
66 }
67 return -2;
68 }
69
70 int sqlist_isempty(sqlist *me)
71 {
72 if(me ->last == -1)
73 return 0;
74 return -1;
75 }
76
77 int sqlist_setempty(sqlist *me)
78 {
79 me -> last = -1;
80 return 0;
81 }
82
83 int sqlist_getnum(sqlist *me)
84 {
85 return (me -> last +1);
86 }
87
88 int sqlist_display(sqlist *me)
89 {
90 int i;
91 if(me->last == -1)
92 return ;
93 for(i =0;i<= me->last;i++)
94 printf("%d ",me ->data[i]);
95 printf("\n");
96 return 0;
97
98 }
99 int sqlist_destroy(sqlist *me)
100 {
101 free(me);
102 return 0;
103 }
104
105 int sqlist_union(sqlist *list,sqlist *list1)
106 {
107
108 printf(" union\n");
109 int i =0;
110 while (i <= list1 -> last)
111 {
112 if(sqlist_find(list,&(list1 -> data[i]))< -1)
113 {
114 sqlist_insert(list,0,&(list1 -> data[i]));
115 }
116 i++;
117 }
118 return 0;
119 }
sqlist.h
1 #ifndef SQLIST_H__
2 #define SQLIST_H__
3
4 #define DATASIZE 1024
5 typedef int datatype;
6
7 typedef struct node_st
8 {
9 datatype data[DATASIZE];
10 int last;
11 }sqlist;
12
13 sqlist *sqlist_create();
14
15 void sqlist_create1(sqlist **);
16
17 int sqlist_insert(sqlist *,int i,datatype * );
18
19 int sqlist_delete(sqlist *,int i);
20
21 int sqlist_find(sqlist *,datatype *);
22
23 int sqlist_isempty(sqlist *);
24
25 int sqlist_setempty(sqlist *);
26
27 int sqlist_getnum(sqlist *);
28
29 int sqlist_display(sqlist *);
30
31 int sqlist_destroy(sqlist *);
32
33 int sqlist_union(sqlist *,sqlist *);
34 #endif
makefile
makefile
all:main
main:main.o sqlist.o
$(CC) $^ -o $@
clean:
rm *.o main -rf