静态链表 C++版

  笔记静态链表的实现

 1 #include "stdafx.h"
 2 #include<iostream>
 3 
 4 using namespace std;
 5 
 6 #define MAXSIZE 100
 7 
 8 typedef int ElemType;
 9 
10 typedef struct {
11     ElemType data;
12     int cur;
13 }component,SLinkList[MAXSIZE];
14 
15 void InitSpace_SL(SLinkList &space) {
16     for (int i = 0; i < MAXSIZE - 1; ++i) space[i].cur = i + 1;
17     space[MAXSIZE - 1].cur = 0;
18 }
19 
20 int Malloc_SL(SLinkList &space) {
21     int i = space[0].cur;
22     if (space[0].cur) space[0].cur = space[i].cur;
23     return i;
24 }
25 
26 void Free_SL(SLinkList & space, int k) {
27     space[k].cur = space[0].cur; space[0].cur = k;
28 }
29 
30 void difference(SLinkList &space, int &S) {
31     InitSpace_SL(space);  //初始化备用空间
32     S = Malloc_SL(space);  //生成S的头结点
33     int r = S;
34     cout << "请输入A,B集合的元素个数,用空格隔开" << endl;
35     int m, n;
36     cin >> m >> n;
37     int i, j;
38     cout << "请依次输入A集合的元素并按回车" << endl;
39     int nn;
40     //给A集合添加数据
41     for (j = 1; j <= m; ++j) {
42         i = Malloc_SL(space); //取出下一个空间索引
43         cin>>nn; //赋值
44         space[i].data = nn;
45         space[r].cur = i;  //尾插法(r指向的是最后一个结点,让上一次最后结点指向i索引)
46         r = i;     //r指向最后的节点
47     }
48 
49     space[r].cur = 0;  //将最后一个结点指向空(也就是0)
50     printf("请依次输入B集合的元素\n");
51     int b;
52     int p;
53     int k;
54     for (j = 1; j <= n; ++j) {
55         cin >> b; //读取并记录到临时变量b
56         p = S;  //记录头结点
57         k = space[S].cur;  //k指向第一个结点
58         while (k != space[r].cur && space[k].data != b) {
59             p = k;
60             k = space[k].cur; //指向下一个结点
61         }
62         if (k == space[r].cur) {  //不存在元素b,插入到r所指结点之后
63             i = Malloc_SL(space);
64             space[i].data = b;
65             space[i].cur = space[r].cur;
66             space[r].cur = i;
67         }
68         else {  //存在元素b,删除
69             space[p].cur = space[k].cur;
70             Free_SL(space, k);
71             if (r == k) r = p;
72         }
73     }
74     //指回头指针
75     space[0].cur = S;
76 
77 }
78 
79 void Show_SL(SLinkList &space) {
80     printf("链表的打印结果是\n");
81     int s = Malloc_SL(space); //指向头结点
82     while (space[s].cur != 0) {
83         s = Malloc_SL(space);
84         cout << space[s].data<<" ";
85     }
86     cout << endl;
87 }
88 
89 
90 int main() {
91     SLinkList sl;
92     int s;
93     difference(sl, s);
94     Show_SL(sl);
95     system("pause");
96     return EXIT_SUCCESS;
97 }

 实现效果如下:

 

 

 

学习自 严蔚敏的《数据结构》静态链表

posted @ 2019-05-19 09:22  消失的白桦林  阅读(358)  评论(0编辑  收藏  举报