數據結構(線性表,隊列,棧,樹,圖)

 

1.線性鏈表的順序存儲構建(SeqList.h)spa

順序表構建code

 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("順序表已滿沒法插入! \n");    
31         return 0; 
32     }
33     else if(i < 0 || i > L->size )
34     {
35         printf("參數i不合法! \n");
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("順序表已空無數據元素可刪! \n");
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不合法! \n");
84         return 0;
85     }
86     else
87     {
88         *x = L.list[i];
89         return 1;
90     }
91 }

示例——對順序表的操做(增刪改查)blog

  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("順序表已滿沒法插入!\n");
 60         return 0;
 61     }
 62     else if(i<0||i>L->size+1)
 63     {
 64         printf("參數i不合法!\n");
 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("順序表已空無數據元素可刪!\n");
 86         return 0;
 87     }
 88     else if(i<0||i>L->size-1)
 89     {
 90         printf("參數i不合法!\n");
 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表爲\n");
111     for(i=0;i<L.size;i++)
112     {
113         printf("%d ",L.list[i]);
114     }
115     printf("\n共%d個元素\n\n",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位置元素\n");
137     ListDelete(&L,20,&x);
138     printf("所刪除元素爲:%d\n",x);
139     ListShow(L);
140     
141     //增長操做 
142     printf("2.在1位置插入元素10\n");
143     ListInsert(&L,1,10);
144     ListShow(L);
145     
146     //查詢操做 
147     printf("3.查詢30在鏈表中的位置:%d\n",ListLocate(L,30));
148     printf("\n");
149     printf("4.查詢20(已刪除)在鏈表中的位置:%d\n",ListLocate(L,20));
150      
151     return 0;    
152 }

運行結果it

 

To be continued ,io

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

相關文章
相關標籤/搜索