• 静态链表 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集合的元素
    ");
    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("链表的打印结果是
    ");
    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 }

     实现效果如下:

     

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

  • 相关阅读:
    Django之Admin
    反射功能:***attr
    python单例模式
    三元表达式,推导式,生成器表达式
    jquery的each()
    Django篇之F,Q
    Django的思维导图
    Models_Class 有choice,如何显示其中文
    Java并发机制(1)--线程状态与方法(转)
    Java并发机制(2)--synchronized与Lock
  • 原文地址:https://www.cnblogs.com/linkmust/p/10888168.html
Copyright © 2020-2023  润新知