1.2静态链表

来源:互联网 发布:千牛是什么软件 编辑:程序博客网 时间:2024/06/06 03:37
#include<iostream>#define MAXSIZE 100using namespace std;typedef struct {int x;int next;}SNode;typedef struct {SNode sp[MAXSIZE];int SL;}StList,*PStList;//静态链表初始化PStList Creat_StList(void){//创建一静态链表,入口参数无PStList PL;PL=(PStList)malloc(sizeof(StList));if(PL){PL->SL=-1;    //PL->sp[0].next=-1;}return PL;}//求静态链表的长度int Length_StList(StList L){return L.SL+1;}//静态链表的检索操作int Location_StList(StList L,int x){int i=0;while(i<L.SL&&L.sp[i].x!=x)    i++;if(i>=L.SL)  return 0;//查找失败else return (i+1);}//静态链表的插入操作int Insert_StList(PStList PL,int x){//在静态链表的((第i个元素之前))插入x//;if(!PL){cout<<"表不存在!";return (-2);}if(PL->SL>=MAXSIZE){cout<<"表溢出!";return (-1);}/*if(i<1||i>PL->SL+1){cout<<"插入位置不合法!";return 0;}*/    PL->sp[PL->SL+1].x=x;PL->sp[PL->SL+1].next=-1;if(PL->SL>=0)        PL->sp[PL->SL].next=PL->SL+1;PL->SL++;return 1;    // 插入成功}//静态链表的删除操作int Delete_StList(PStList PL,int i){//删除静态链表第i个元素    int j,k;if(!PL){cout<<"表不存在!";return (-2);}if(PL->SL>=MAXSIZE){cout<<"表溢出!";return (-1);}if(i<1||i>PL->SL){cout<<"删除位置不合法!";return 0;}k=PL->sp[0].next;for(j=0;j<i-1;j++)k=PL->sp[j].next;    PL->sp[j].next=PL->sp[k].next;return 1;    // 删除成功}int josephus(PStList josephus_StList,int s,int m){//入口参数为已存在的链表头指针,起始位置s,报数到mint i,s1,w;if(!josephus_StList){cout<<"表中无元素!";return 0;}cout<<"输出约瑟夫序列:"<<endl;    for(i=josephus_StList->SL;i>0;i--){s1=(s1+m-1)%i;  //出列元素下标w=josephus_StList->sp[s1].x;cout<<w<<"\t";Delete_StList(josephus_StList,s1+1);}return 1;}int main(){PStList H=Creat_StList();int i;for(i=0;i<10;i++)        Insert_StList(H,9-i);for(i=0;i<10;i++)cout<<H->sp[i].x<<" ";//josephus(H,1,2);    return 0;}

0 0
原创粉丝点击