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

歡迎訪問 生活随笔!

生活随笔

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

生活经验

静态链表实现(A-B)+(B-A)【代码】

發布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 静态链表实现(A-B)+(B-A)【代码】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

-----------------------------------------------第一次發代碼,寫在前面------------------------------------------------------

思路不完全等同于嚴師太的課本,所以代碼并不是參照課本。

代碼參照《大話數據結構》相應章節,并經過了相應修改

注意:鏈表下標為i的節點和鏈表中第i個節點在鏈表初始化后是一樣的,但是在經過刪除操作后不一樣了。

為此本人在這里浪費了很多時間調試。注意細節。

代碼可有某些地方有瑕疵,但是通過了C::B跑了幾組數據,應該沒大問題。

共同學習,共同進步!

?

-----------------------------------------------以下摘自《大話數據結構》----------------------------------------------------

在靜態鏈表中,每一個結點包含兩部分內容,一部分是data(即有意義的數據),另一部分是cur(存儲該元素下一個元素所在數組對應的下標)。

有幾個特殊的結點:

首先是下標為0的結點中不包含有意義的數據,它的cur存儲的是備用鏈表(即沒有存儲的數據的那些結點)第一個結點的下標。如上圖2所示,數組第一個元素的cur存放的是7。

其次是數組最后一個元素,數組最后一個元素的cur存放的是靜態鏈表的第一個結點的下標(此處的第一個結點,是指有實質意義的數據的結點)。

最后就是鏈表的最后一個元素(并不一定是數組的最后一個元素),鏈表最后一個元素的cur一般存放0,表示它后面的結點為空了。

?

---------------------------------------------代碼如下---------------------------------------------------------

?

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 #define MAXSIZE 100
  6 
  7 typedef struct
  8 {
  9 int data;
 10 int cur;
 11 }component,SLinkList[MAXSIZE];
 12 
 13 
 14 int InitSpace_SL(SLinkList& space)
 15 {
 16 for(int i=0;i<MAXSIZE-1;i++) space[i].cur=i+1;
 17 space[MAXSIZE-1].cur=0;
 18 return 0;
 19 }
 20 
 21 
 22 int LocateElem_SL(SLinkList &S,int e)//在靜態鏈表中查找第一個值為e的元素,若找到,則返回它在線性表中的位序,否則返回0;
 23 {
 24 int i=S[MAXSIZE-1].cur;
 25 while(i&&S[i].data!=e)
 26 i=S[i].cur;
 27 if(!i) return 0;
 28 else return i;
 29 }
 30 
 31 
 32 int ListLength_SL(SLinkList& L)
 33 {
 34 int j=0;
 35 int i=L[MAXSIZE-1].cur;
 36 while(i)
 37 {
 38 i=L[i].cur;
 39 j++;
 40 }
 41 return j;
 42 }
 43 
 44 
 45 int Malloc_SL(SLinkList &space)
 46 {
 47 int i=space[0].cur;
 48 if(space[0].cur) space[0].cur=space[i].cur;
 49 return i;
 50 }
 51 
 52 
 53 int Free_SL(SLinkList &space,int k)//把下標為k的空閑節點回收到備用鏈表,該節點成為備用鏈表中的首節點
 54 {
 55 space[k].cur=space[0].cur;
 56 space[0].cur=k;
 57 return 0;
 58 }
 59 
 60 int ListInsert_SL(SLinkList &L,int i,int e)//在L中第i個元素之前插入新的元素e
 61 {
 62 int j,k,l;
 63 k=MAXSIZE-1;//k為數組最后一個元素的下標
 64 if(i<1||i>ListLength_SL(L)+1) return 0;
 65 j=Malloc_SL(L);
 66 if(j)//L不為空表
 67 {
 68 L[j].data=e;
 69 for(l=1;l<=i-1;i++)
 70 k=L[k].cur;
 71 L[j].cur=L[k].cur;
 72 L[k].cur=j;
 73 }
 74 return 0;
 75 }
 76 
 77 
 78 int ListInsert2_SL(SLinkList &L,int e)//在備用鏈表表頭插入一個元素
 79 {
 80 int i,j=L[MAXSIZE-1].cur,k=Malloc_SL(L);
 81 for(i=1;i< ListLength_SL(L);i++)
 82 j=L[j].cur;
 83 L[j].cur=k;
 84 L[k].data=e;
 85 L[0].cur=L[k].cur;
 86 L[k].cur=0;
 87 return 0;
 88 }
 89 
 90  
 91 
 92 int ListDelete_SL(SLinkList &L,int i)//刪除在L中的第i個元素e
 93 {
 94 int j,k;
 95 if(i<1||i>ListLength_SL(L)) return 0;
 96 k=MAXSIZE-1;
 97 for(j=1;j<=i-1;j++)
 98 k=L[k].cur;
 99 j=L[k].cur;
100 L[k].cur=L[j].cur;
101 Free_SL(L,j);
102 return 0;
103 }
104 
105 
106 int ListDelete2_SL(SLinkList &L,int i)//刪除在L中下標為i的元素L[i]
107 {
108 int k=L[MAXSIZE-1].cur,m=L[k].cur;
109 int j=L[0].cur;
110 while(m!=i)
111 {
112 k=L[k].cur;
113 m=L[k].cur;
114 }
115 L[k].cur=L[m].cur;
116 L[0].cur=i;
117 L[i].cur=j;
118 return 0;
119 }
120 int MergeList_SL(SLinkList &L1,SLinkList &L2)//(A-B)+(B-A)
121 {
122 int i=L2[MAXSIZE-1].cur;
123 int m;
124 while(i)
125 {
126 m=0;
127 int j=L1[MAXSIZE-1].cur;
128 while(j)
129 {
130 m=LocateElem_SL(L1,L2[i].data);
131 if(m) {ListDelete2_SL(L1,m);break;}
132 j=L1[j].cur;
133 }
134 if(!m) ListInsert2_SL(L1,L2[i].data);
135 i=L2[i].cur;
136 }
137 return 0;
138 }
139 
140 
141 int main()
142 {
143 int m,n,j;
144 SLinkList L1,L2;
145 InitSpace_SL(L1);
146 InitSpace_SL(L2);
147 cout<<"輸入集合A中的元素個數:"<<endl;
148 cin>>m;
149 cout<<"輸入集合A中各元素的值:"<<endl;
150 for(int i=1;i<=m;i++)
151 {
152 cin>>L1[i].data;
153 L1[0].cur=L1[i].cur;
154 }
155 L1[m].cur=0;
156 L1[MAXSIZE-1].cur=1;
157 cout<<"輸入集合B中的元素個數:"<<endl;
158 cin>>n;
159 cout<<"輸入集合B中各元素的值:"<<endl;
160 for(int i=1;i<=n;i++)
161 {
162 cin>>L2[i].data;
163 L2[0].cur=L2[i].cur;L2[MAXSIZE-1].cur=1;
164 }
165 L2[n].cur=0;
166 L2[MAXSIZE-1].cur=1;
167 MergeList_SL(L1,L2);
168 j=L1[MAXSIZE-1].cur;
169 while(j)
170 {
171 cout<<L1[j].data<<" ";
172 j=L1[j].cur;
173 }
174 return 0;
175 }

?

?

-----XJX

轉載于:https://www.cnblogs.com/journal-of-xjx/p/5897654.html

總結

以上是生活随笔為你收集整理的静态链表实现(A-B)+(B-A)【代码】的全部內容,希望文章能夠幫你解決所遇到的問題。

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