静态链表
来源:互联网 发布:java电脑版86 编辑:程序博客网 时间:2024/06/16 09:15
/*静态链表要点:mylist[]中第一个和最后一个不使用(即是不用来储存数据),mylist[0]储存备用链表第一个元素mylist[maxsize-1]储存备用链表第一个储存数据得结点,即是首结点然后静态表表最后一个结点的cur等于0*/#include<stdio.h>#include<string.h>#include<string>#include<iostream>#include<stdlib.h>#include<cmath>#define OK 1#define ERROR 0#define maxsize 1000bool flag=true;using namespace std;typedef int status;typedef int ElemType;typedef struct List{ ElemType data;//储存数据 int cur;//储存游标(cursor)} Conponent,mylist[maxsize];status initList(mylist &L){ int i; for(i=0; i<maxsize-1; i++) L[i].cur=i+1;//这样是使链表空间连起来,方彪以后的插入和删除 L[maxsize-1].cur=0;//首结点下标为0说明链表为空 return OK;}int getlength(mylist L){ int i=0,j,k; k=L[maxsize-1].cur; while(k) { i++; k=L[k].cur; } return i;}status insertList(mylist &L,int x,ElemType e){ int i,j,k; k=L[maxsize-1].cur; //这里flag是全局变量,因为第一次插入该链表时,情况有点特殊,所以用flag来判断是否是首次插入 if(flag) { L[maxsize-1].cur=1; L[1].cur=0;//首次插入结点为下标1的结点,将其cur赋为0 L[1].data=e; L[0].cur=2; flag=false; return OK; } else { if(x<1||x>getlength(L)+1)//这里很重要,因为我们插入规定插到第x个位置前,所以x的值可能比getlength(L)大 return ERROR; j=L[0].cur; L[0].cur=L[j].cur; L[j].data=e;//以上这三句是在设置保存插入值e的空间 i=1; while(i<=getlength(L)&&i<x-1) { k=L[k].cur; i++; } if(i>getlength(L))return ERROR;//以下是将保存了e的空间与链表关联起来 L[j].cur=L[k].cur; L[k].cur=j; } return OK;}status deleteList(mylist &L,int x){ int i,j,k; k=L[maxsize-1].cur; if(x<1||x>getlength(L))//对比以上插入操作,这里x最大为getlength(L) return ERROR; if(x==1)//删除首结点情况特殊需要单独判断 { j=L[maxsize-1].cur; L[maxsize-1].cur=L[j].cur; L[j].cur=L[0].cur; L[0].cur=j; return OK; } else { i=1; while(i<=getlength(L)&&i<x-1) { k=L[k].cur; i++; } if(i>getlength(L))return ERROR; j=L[k].cur; L[k].cur=L[j].cur; L[j].cur=L[0].cur; L[0].cur=j; return OK; }}status traverseList(mylist L){ int i=0,j,k; k=L[maxsize-1].cur; while(k) { printf("%d ",L[k].data); k=L[k].cur; } printf("\n"); return OK;}int main(){int i,j,k;mylist L;initList(L);for(i=1;i<10;i++) insertList(L,i,i);traverseList(L);deleteList(L,1);traverseList(L);deleteList(L,2);traverseList(L);deleteList(L,3);traverseList(L);insertList(L,3,100);deleteList(L,2);traverseList(L);printf("%d\n",getlength(L)); return 0;}
阅读全文
0 0
- 静态链表
- VB静态链表
- 静态链表
- 静态链表
- 静态链表
- 静态链表
- 静态链表
- 静态链表实例
- 静态链表
- 静态链表。实现。
- 静态链表
- 静态链表
- 静态链表例子
- 静态链表模版
- 静态链表
- 【数据结构】静态链表
- 静态链表
- 静态链表
- 基于Dragonboard 410c的总线控制之SPI(二)
- ProjectForge研究第一天
- poj 1861 Network(并查集)
- 将DIB/bitmap读入内存并转为 halcon hobject
- c++中string用法
- 静态链表
- JavaNote5
- 1003. 我要通过!(20)
- Jzoj4721 LCS
- 字符串的匹配--cookbook读书笔记
- Single Element in a Sorted Array
- SpringMVC源码剖析(二)- DispatcherServlet的前世今生
- Redis面向互联网的解决方案
- 侧滑菜单(抽屉效果)DrawerLayout实现原理