静态链表--简单操作
来源:互联网 发布:数据库的外键怎么设置 编辑:程序博客网 时间: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里的创建节点,追加到父节点上。。。总之呢,语言就像乐器一样是相通的。重要的是把基础打牢以不变应万变。
阅读全文
0 0
- 静态链表--简单操作
- 简单的静态链表
- 简单的静态链表
- 静态链表系列操作
- 链表简单操作
- 简单链表操作
- 简单链表操作
- 简单链表操作
- 链表简单操作
- 简单链表操作
- 链表简单操作
- 【数据结构】 简单静态顺序栈的操作
- 简单静态、动态链表的建立
- 静态链表的简单应用
- 静态链表的C++简单实现
- 静态链表的一些操作
- 静态链表的操作实现
- 静态链表的所有基本操作
- 【面向HTML5--表单2.0】
- 深度学习与自然语言处理牛人关系图谱
- leetcode005-Container With Most Water
- 《程序设计入门—Java语言.翁恺》第六周编程作业(1)-单词长度
- Eclipse里maven项目解决An error occurred while filtering resources错误
- 静态链表--简单操作
- 图灵奖设立50周年,向伟大的计算机科学家们致
- 常用采样方法
- Matlab、C混合编程(Matlab调用C)
- Cocos Creator Shader工具
- 【STM32小案例 07 】STM32完美可用的延时程序,自用延时程序库,直接调用
- CPU
- 关于Navicate life 修改表中字段,删除字段,修改字段无响应的处理。
- Lesson 2:作业5:描述cpu的速度与硬盘的容量