静态链表--简单操作

来源:互联网 发布:数据库的外键怎么设置 编辑:程序博客网 时间:2024/06/07 21:08

以下是某同学的成绩,通过静态链表实现增加,删除,查询等功能


#include<iostream>using namespace std;#define MAX 100typedef struct SListNode {int data;  //所存放的数据int cur;  //游标 !注意游标不同于下标}StaticList[MAX]; void Init(StaticList & space )    //初始化数组 { for(int i=0;i< MAX -1 ;i++)  space[i].cur  = i+1; space[MAX -1].cur = 0;   //目前静态链表为空,最后一个元素的cur为0;  } int Malloc(StaticList & space )   //申请节点 { int i = space[0].cur;   //当前数组第一个元素的cur值 if(space[0].cur) { space[0].cur = space[i].cur;   //拿出第一个分量,所以下一个分量用来备用 } return i;    //返回第一个备用的下标 } void Free(StaticList & space,int k)   //释放节点 { space[k].cur = space[0].cur; space[0].cur =k; //此时k成了第一个avail } int insert(StaticList & space,int avail,int t,int pl)////插入  在第pl个元素之前插入一个下标值为m的新节点 {  if(pl<=0)  {    return 0;  }  int i = avail;  int n = 0;//计数器  while(i)  {  if(n ==pl-1 && space[i].cur)//找到插入节点{space[t].cur = space[i].cur;space[i].cur = t;}i = space[i].cur;n++;  }  return 0; }int dele(StaticList & space,int avail, int pl)   //删除 { if(pl<0) return 0; int i=avail; int m =0; while(i) {  if(m == pl-1)  {   int t = space[i].cur;  space[i].cur = space[t].cur;  Free(space,t);//回收被删除的节点    }  i = space[i].cur;  m++; } return 0; }int add(StaticList & space,int avail,int t)//增加 { int i =avail; while(space[i].cur) {       i = space[i].cur; } space[i].cur = t; space[t].cur = 0; return 0; }int Get(StaticList & space ,int i,int n){int x;    cout<<"请输入要查找的结点:"<<endl;cin>>x;       for(i=0;i<n;i++)     {        if(space[i].data==x)        return i;      }     cout<<"该节点的位置是:"<<i+1<<endl;}void Print(StaticList & space, int avail,int m ){  //打印   cout<<"打印链表值如下:"<<endl; m = space[avail].cur;while (m){cout<<space[m].data<<"  ";m = space[m].cur;}cout<<endl;  }int main(){    int t,i,n,num,pl,w; //定义一个静态链表StaticList List;Init(List);int avail = Malloc(List);//avail点List[avail].cur = 0;     cout<<"请输入静态链表的节点个数:"<<endl;     cin>>n;     cout<<"请输入静态链表的每个节点:"<<endl;      for(i=0;i<n;i++) {       t=Malloc(List);       cin>>List[t].data ;       add(List,avail,t); }Print(List,avail,i);    cout<<"请输入要查找结点的位置:"<<endl;cin>>w;cout<<"该节点为: "<<List[w+1].data<<endl;cout<<"请输入插入结点的位置和值:"<<endl;cin>>pl>>num;t = Malloc(List);List[t].data = num;    insert(List,avail,t,pl);Print(List,avail,i);    cout<<"请输入要删除结点的位置:"<<endl;cin>>pl;dele(List,avail,pl);n--;    Print(List,avail,i); Get(List,i,n);        return 0;}




实验结果如图:





实验心得:

     一:

 在c++中如果用typedef的区别:
    struct   Student   
    {   
    int   a;   
    }stu1;//stu1是一个变量  

 
    typedef   struct   Student2   
    {   
    int   a;   
    }stu2;//stu2是一个结构体类型=struct Student  

 
    使用时可以直接访问stu1.a
    但是stu2则必须先   stu2 s2;
    然后               s2.a=10;


二、比之前更懂得了框架的作用,打包函数。以及函数传参具体是怎么实现的。里面的逻辑以及实际运用


三、本实验中的创建一个新节点并赋值。在调用add 函数这一操作。让我有种似曾相识的感觉。嗯,没错就是js里的创建节点,追加到父节点上。。。总之呢,语言就像乐器一样是相通的。重要的是把基础打牢以不变应万变。