顺序表

选择合适的数据结构 提高算法写的代码的效率
数据 存储和管理

根据数据之间的关系(逻辑结构)
集合 类型相同 但没有关联
线性关系 每个数据唯一的前驱和后继(排队)
树状结构 一对多 树状结构
图 多对多 图


A->B->C-D

数据的存储方式(存储结构)
顺序存储 --->数组 存放元素位置是相邻的
链式存储 数据位置不相邻 可以通过上一个数据找到下一个数据

顺序表 链表/双链表 栈和队列 线性表

顺序表 数据的方式 数组 动态数组

存放若干数据

算法 二分查找
如果有序那么可以有其他的查找方式
无序 只能一个个查找


算法 计算数据
数据结构 存储和管理数据

 1 #include <stdio.h>
 2 #include <time.h>
 3 #include <stdlib.h>
 4 typedef struct list
 5 {
 6     int arr[100];
 7     int len;//当前存放的数组个数
 8     int size;//数组大小  如果是动态数组  就记得加上size
 9 }LIST;
10 void init(LIST*p);//初始化 对顺序表进行操作------->传入地址  结构体指针
11 void insertData(LIST*p,int data);//插入
12 void deleteData(LIST*p,int data);//删除
13 void findData(LIST*p,int data);//查找
14 int main()
15 {
16     int i;
17     LIST mylist;//准备一个顺序表
18     init(&mylist);
19     srand((unsigned)time(NULL));
20     for (i=0;i<80;++i)
21     {
22         insertData(&mylist,rand()%200);
23     }
24     for (i=0;i<mylist.len;i++)
25     {
26         printf("%d\t",mylist.arr[i]);
27     }
28     getchar();
29     return 0;
30 }
31 void init(LIST*p)
32 {
33     p->len=0;
34     p->size=100;
35 
36 }
37 void insertData(LIST*p,int data)
38 {//头插  尾插  中间插入
39 #if 0    //尾插
40     if (p->len==p->size)//如果插满就不能在插了
41     {
42         return;
43     }
44     p->arr[p->len]=data;
45     p->len++;
46 #else
47     if (p->len==p->size)
48     {
49         return;
50     }
51     int i;
52     i=p->len;
53     while (i-1>=0&&p->arr[i-1]>data)
54     {
55         p->arr[i]=p->arr[i-1];
56         --i;
57     }
58     p->arr[i]=data;
59     p->len++;
60 #endif
61 }
62 void deleteData(LIST*p,int data)
63 {
64     for (int i=0;i<p->len;++i)
65     {
66         if (p->arr[i]==data)//不止=  区间  大于100小于120
67         {
68             //找到要删除的元素下标
69             for (p->arr[i]==data)
70             {
71                 for (int j=i;j<p->len-1;++j)
72                 {
73                     p->arr[j]=p->arr[j+1];
74                 }
75                 p->len;//删除之后 元素个数减一
76                 break;//删除一个之后  就可以结束了
77             }
78         }
79     }
80 
81 }
82 void findData(LIST*p,int data)
83 {
84     int i;
85     for (i=0;i<p->len;++i)//数据可能有多个
86     {
87         if (p->arr[i]==data)
88         {
89             printf("arr[%d]=%d\n",i,p->arr[i]);//后续可以通过下标 修改 删除
90         }
91     }
92 }

 

 

posted @ 2019-11-12 22:14  insist钢  阅读(184)  评论(0编辑  收藏  举报