Linux下学C语言——第十六节 数据结构|顺序存储线性表

逻辑:线性,树形,图,集合

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值