日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

数据结构-线性表的顺序结构

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-线性表的顺序结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  1 #include "stdio.h"
  2 #include "stdlib.h"
  3 
  4 typedef int ElemType;        //線性表存儲基本類型
  5 typedef int Status;            //基本操作函數類型
  6 #define LIST_INT_SIZE 50    //線性表初始化存儲空間分配量
  7 #define LISTINCREMENT 10    //線性表存儲空間分配量增值
  8 #define OK 1
  9 #define ERROR 0
 10 
 11 typedef struct 
 12 {
 13     ElemType *elem;    //存儲空間基址
 14     int length;        //當前長度
 15     int listsize;    //當前分配的存儲容量(以sizeof(ElemType)為單位)
 16 }SqList;
 17 
 18 //構建一個空的線性表
 19 Status InitList(SqList &L)
 20 {
 21     L.elem = (ElemType *)malloc(LIST_INT_SIZE * sizeof(ElemType));
 22     if(!L.elem)                        //如果初始化失敗返回ERROR
 23         return ERROR;
 24     L.length = 0;                    //空表長度為0
 25     L.listsize = LIST_INT_SIZE;        //初始存儲容量
 26     return OK;    
 27 }//InitLise
 28 
 29 //銷毀線性表L
 30 Status DestroyList(SqList &L)
 31 {
 32     free(L.elem);    //收回空間
 33     L.elem = NULL;    //基址指向NULL
 34     L.length = 0;    //長度變0
 35     L.listsize = 0;    //清除存儲容量
 36     return OK;
 37 }//DestroyList
 38 
 39 //重置線性表L為空表
 40 bool ClearList(SqList &L)
 41 {
 42     L.length = 0;
 43     return OK;
 44 }//ClearList
 45 
 46 //查看線性表是否為空表
 47 Status ListEmpty(SqList L)
 48 {
 49     if(L.length == 0)
 50         return OK;
 51     else
 52         return ERROR;
 53 }//ListEmpty
 54 
 55 //查看線性表的元素個數
 56 int ListLength(SqList L)
 57 {
 58     return L.length;    //返回長度
 59 }//ListLength
 60 
 61 //用e返回第i個數據元素的值
 62 Status GetElem(SqList L, int i, ElemType &e)
 63 {
 64     if(i < 1 || i > L.length)    //判斷i值是否合法
 65         return ERROR;
 66     e = L.elem[i-1];                //賦值第i個元素值
 67     return OK;
 68 }//GetElem
 69 
 70 //返回L中第一個與e滿足關系compare()的數據元素
 71 //若這樣的數據元素不存在則返回0
 72 int LocateElem(SqList L, ElemType e, Status(*compare)(ElemType,ElemType))
 73 {
 74     ElemType *p = L.elem;
 75     int i = 1;
 76     while(i <= L.length && !compare(*p++,e))
 77         ++i;
 78     if(i <= L.length)
 79         return i;
 80     else
 81         return -1;
 82 }//LocateElem
 83 
 84 //若cur_e是L的數據元素,且不是第一個,則用pre_e返回他的前驅
 85 //否則操作是啊比,pre_e無定義
 86 Status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e)
 87 {
 88     int i = 2;
 89     ElemType *p = L.elem+1;
 90     while(i <= L.length && *p != cur_e)
 91     {
 92         p++;
 93         i++;
 94     }
 95     if(i > L.length)
 96         return ERROR;
 97     else
 98     {
 99         pre_e = *--p;
100         return OK;
101     }
102 }//PriorElem
103 
104 //若cur_e是L的數據元素,且不是最后一個,則用next_e返回他的后驅
105 //否則操作是啊比,next_e無定義
106 Status NextList(SqList L, ElemType cur_e, ElemType &next_e)
107 {
108     int i = 1;
109     ElemType *p = L.elem;
110     while(i <= L.length && *p != cur_e)
111     {
112         ++p;
113         ++i;
114     }
115     if(i == L.length)
116         return ERROR;
117     else
118     {
119         next_e = *++p;
120         return OK;
121     }
122 }//NextList
123 
124 //插入元素
125 Status ListInsert(SqList &L, int i, ElemType e)
126 {
127     if(i < 1 || i > L.length+1)    //判斷i值是否合法
128         return ERROR;    
129     SqList newbase;        //用于存儲新加元素的位置空間
130     if(L.length >= L.listsize)    //當前存儲分配已滿,增加分配
131     {
132         newbase.elem = (ElemType *)realloc(L.elem,
133             (L.listsize + LISTINCREMENT) * sizeof(ElemType));
134         if(!newbase.elem)    //存儲分配失敗
135             return ERROR;        
136         L.elem = newbase.elem;        //新基址
137         L.listsize += LISTINCREMENT;    //增加存儲容量
138     }
139     ElemType *q = &(L.elem[i-1]);    //q指向插入位置
140     for (ElemType *p = &(L.elem[L.length-1]); p >= q; --p)    //p指向表尾
141         *(p+1) = *p;    //插入位置及之后的元素右移
142     *q = e;    //插入元素
143     ++L.length;    //表長加一
144     return OK;
145 }//ListInsert
146 
147 //刪除第幾個元素并返回值
148 Status ListDelete(SqList &L, int i, ElemType &e)
149 {
150     if((i < 1) || (i > L.length))            //判斷i值是否合法
151         return ERROR;                        //i值不合法返回失敗
152     ElemType *p = &(L.elem[i-1]);            //p指向被刪除元素的位置
153     e = *p;                                    //返回被刪除元素的值
154     ElemType *q = L.elem + L.length - 1;    //q指向最后一個元素的位置
155     for (++p; p <= q; ++p)                    //被刪除元素之后的元素左移
156         *(p-1) = *p;
157     --L.length;                                //當前表長減一
158     return OK;
159 }//ListDelete
160 
161 //依次對L的每一個數據元素調用Visit()函數
162 Status ListTraverse(SqList L, void(*Visit)(ElemType*))
163 {
164     ElemType *p = L.elem;
165     int i;
166     for(i = 1; i <= L.length; i++)
167         Visit(p++);
168     printf("\n");
169     return OK;
170 }//ListTraverse
171 
172 //ListTraverse()調用函數Visit()
173 //Visit函數在這里做輸出鏈表功能
174 void Visit(ElemType *c)
175 {
176     printf("%d",*c);    //%d隨data類型而變
177 }
178 
179 //查找元素
180 int ListLocate(SqList L, ElemType e)
181 {
182     int i = 1;
183     while(i <= L.length)
184     {
185         if (L.elem[i-1] == e)
186             break;
187         i++;
188     }
189     if(i <= L.length)            //找到指定元素則返回位置否則返回-1
190         return i;
191     else
192         return -1;
193 }//ListLocate

線性表的順序表達的13個基本函數。

參考《數據結構(C語言版)》嚴蔚敏編著

轉載于:https://www.cnblogs.com/ABook/p/5370008.html

總結

以上是生活随笔為你收集整理的数据结构-线性表的顺序结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。