数据结构(线性表,队列,栈,树,图)

1.线性链表的顺序存储构建(SeqList.h)

顺序表构建

 1 //顺序表构建
 2 #include <stdio.h>
 3 #define MaxSize 100
 4 typedef int DataType;
 5 
 6 typedef struct
 7 {
 8     DataType list[MaxSize];
 9     int size;
10 } SeqList;
11 
12 //初始化顺序表L
13 void ListInitiate(SeqList *L)
14 {    
15     L->size = 0;      //定义初始数据元素个数
16 }
17 
18 //返回顺序表L的当前数据元素个数
19 int ListLength(SeqList L)    
20 {
21     return L.size;
22 }
23 
24 //在顺序表L的位置i(0≤i≤L.size)前插入数据元素值x,插入成功返回1,插入失败返回0
25 int ListInsert(SeqList *L, int i, DataType x)
26 {
27     int j;
28     if(L->size >= MaxSize)
29     {
30         printf("顺序表已满无法插入! 
");    
31         return 0; 
32     }
33     else if(i < 0 || i > L->size )
34     {
35         printf("参数i不合法! 
");
36         return 0;
37     }
38     else
39     {
40         for(j = L->size+1; j > i; j--) 
41         L->list[j] = L->list[j-1];               //为插入做准备
42 
43         L->list[i] = x;                          //插入
44         L->size ++;                          //元素个数加1
45                           
46         return 1;
47     }
48 }
49 
50 //删除顺序表L中位置i(0≤i≤L->size-1)的数据元素值并存放到参数x中,删除成功返回1,删除失败返回0
51 int ListDelete(SeqList *L, int i, DataType *x)    
52 { 
53     int j;
54     if(L->size == 0)
55     {
56         printf("顺序表已空无数据元素可删! 
");
57 
58         return 0;
59     }
60     else if(i <0 || i > L->size-1)
61     {
62         printf("参数i不合法");
63         return 0;
64     }
65     else
66     {
67         *x = L->list[i];                  //保存删除的元素到参数x中
68 
69         for(j = i +1; j <= L->size; j++) 
70         L->list[j-1] = L->list[j];        //依次前移
71 
72         L->size--;                       //数据元素个数减1
73 
74         return 1;
75     }
76 }
77 
78 //取顺序表L中第i个数据元素的值存于x中,成功则返回1,失败返回0
79 int ListGet(SeqList L, int i, DataType *x)
80 {
81     if(i < 0 || i > L.size-1)
82     {
83         printf("参数i不合法! 
");
84         return 0;
85     }
86     else
87     {
88         *x = L.list[i];
89         return 1;
90     }
91 }

示例——对顺序表的操作(增删改查)

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #define MaxSize 100
  4 #define ListLenth 50
  5 typedef int DataType;
  6 
  7 //定义顺序表的类型SeqList
  8 typedef struct
  9 {
 10     DataType list[MaxSize];
 11     int size;
 12 } SeqList;
 13 
 14 //初始化数据
 15 void CreList(SeqList *L)
 16 {
 17     int i;
 18 
 19     L->size=50;
 20     //顺序表加入数据,依次为0-49
 21     for(i=0;i<50;i++)
 22     {
 23         L->list[i]=i;
 24     }
 25 }
 26 
 27 //初始化顺序表*L
 28 void ListInitiate(SeqList *L)
 29 {
 30     L->size=0;
 31 }
 32 
 33 //返回顺序表L的当前数据元素个数 
 34 int ListLength(SeqList *L)
 35 {
 36     return L->size;
 37 }
 38 
 39 //查找功能,传参——线性表L和查找元素DataType x,成功返回x在L中的序号否则返回-1
 40 int ListLocate(SeqList L,DataType x)
 41 {
 42     int i=0;
 43     while(i<L.size&&L.list[i]!=x)
 44     {
 45         i++;
 46     }
 47     if(i<L.size) 
 48         return (i);
 49     else
 50         return (-1);
 51 }
 52 
 53 //插入功能,传参——线性表L、插入位置i和所插入元素x,成功返回1否则返回0
 54 int ListInsert(SeqList *L,int i,DataType x)
 55 {
 56     int j;
 57     if(L->size>=MaxSize-1)
 58     {
 59         printf("顺序表已满无法插入!
");
 60         return 0;
 61     }
 62     else if(i<0||i>L->size+1)
 63     {
 64         printf("参数i不合法!
");
 65         return 0;
 66     }
 67     else
 68     {
 69         for(j=L->size;j>i;j--)
 70         {
 71             L->list[j]=L->list[j-1];        //为插入做准备
 72         }
 73         L->list[i]=x;                    //插入
 74         L->size++;                        //元素个数加1
 75         return 1;
 76     }
 77 }
 78 
 79 //删除功能,传参——顺序表L、删除元素的序号i和要返回所删除的元素
 80 int ListDelete(SeqList *L,int i,DataType *x)
 81 {
 82     int j;
 83     if(L->size==0)
 84     {
 85         printf("顺序表已空无数据元素可删!
");
 86         return 0;
 87     }
 88     else if(i<0||i>L->size-1)
 89     {
 90         printf("参数i不合法!
");
 91         return 0;
 92     }
 93     else
 94     {
 95         *x=L->list[i];
 96         for(j=i+1;j<L->size;j++)
 97         {
 98             L->list[j-1]=L->list[j];
 99         }
100         L->size--;
101 
102         return 1;
103     }
104 }
105 
106 void ListShow(SeqList L)
107 {
108     int i;
109     
110     printf("当前List表为
");
111     for(i=0;i<L.size;i++)
112     {
113         printf("%d ",L.list[i]);
114     }
115     printf("
共%d个元素

",L.size);
116     
117     return ;
118 }
119 
120 main()
121 {
122 
123     int i;
124     SeqList L;
125     DataType x;
126     
127     //初始化顺序表L 
128     ListInitiate(&L);
129     //初始化顺序表数据为0-49 
130     CreList(&L);
131 
132     //显示链表 
133     ListShow(L);
134     
135     //删除操作 
136     printf("1.删除20位置元素
");
137     ListDelete(&L,20,&x);
138     printf("所删除元素为:%d
",x);
139     ListShow(L);
140     
141     //增加操作 
142     printf("2.在1位置插入元素10
");
143     ListInsert(&L,1,10);
144     ListShow(L);
145     
146     //查询操作 
147     printf("3.查询30在链表中的位置:%d
",ListLocate(L,30));
148     printf("
");
149     printf("4.查询20(已删除)在链表中的位置:%d
",ListLocate(L,20));
150      
151     return 0;    
152 }

运行结果

To be continued ,

learning...(Date:2016-01-10)

原文地址:https://www.cnblogs.com/Ambrose/p/5118826.html