数据结构链表知识整合

2009-11-14 14:35
//定义单链表结构体
typedef struct node{
int data;
struct node *next;
}Lnode,*LinkList;
//创建空单链表
LinkList Creat_Link(void){
LinkList H;
H=(LinkList)malloc(sizeof(Lnode));
if(!H)
{
   cout<<"空链表创建不成功"<<endl;
   return NULL;
}
else
{
   H->next=NULL;//带头结点的空链表;
   return H;
}
}
//创建实单链表
LinkList CreatLink()//带头结点
{
    int data,i=1;
    LinkList H,s,r;//设R为未知
    H=(LinkList)malloc(sizeof(Lnode));        /*生成头结点*/
    r=H;                                      /*尾指针初值指向头结点*///头结点之后
    cin>>data;
    while(data!=0)                              /*0为输入结束符*/
    {
        {
    cout<<"第"<<i<<"个元素!"<<endl;
    s=(LinkList)malloc(sizeof(Lnode));    /*生成新结点*/
            s->data=data;
   }
        r->next=s;                            /*新结点插入表尾*/
        r=s;                                  /*尾指针r指向新的表尾*/
        cin>>data;                            /*读下一结点*/
        ++i;
}
    r->next=NULL;
    return (H);
}
//长度计算
int Length_Link(LinkList H)
{
LinkList p=H;
int count=-1;
while(p)
{
   p=p->next;
   count++;
}
return(count);
}
//打印单链表
void Printdata_Link(LinkList H)//zhuyitoujiedianshigudingbudongde 用时必须
{
    LinkList p=H->next;  
    while(p!=NULL)
{
       cout<<p->data<<endl;
       p=p->next;
}
    cout<<endl;
}
//删除表头!
LinkList delete_H(LinkList H)//Delete表头!
{
    LinkList p;
    p=H;
    if(H->next!=NULL)
{
       H=p->next;
       free(p);
    }
     return(H);
}
//删除表尾
LinkList delete_W(LinkList H)//找到链尾
{
    LinkList p,s;
    p=H;
   
    if(p->next!=NULL)
        while(p->next->next!=NULL)
             {p=p->next;}
   
    s=p->next;
    p->next=NULL;
    free(s);
    return(H);
}
//删除指定点
int delete_link(LinkList H,int i)//删除指定点
{
   LinkList p,q;
   int j=0;//位置计数器
   p=H;
   while((p->next)&&(j<i-1))
   {
        p=p->next;j++;
   }
   if(j!=(i-1))
   {
     cout<<"/n"<<"The value of x=%d is not reasonable!"<<i<<endl;
     return(0);
   }
  
   if(p==NULL)
   {
      cout<<"out of space!!"<<endl;
      return(0);
   }
   else
   {
       q=p->next;
       p->next=q->next;
       free(q);
       return(1);
   }
}
//约瑟夫问题
int josephus_LinkList(LinkList josephus_Link,int s,int m)//约瑟夫问题的实现
{
LinkList p,pre;
int count;
if(!josephus_Link)
{
   cout<<"表中无元素!"<<endl;
   return(0);
}
p=josephus_Link;
for(count=0;count<s;count++)
   p=p->next;
cout<<"输出约瑟夫序列:"<<endl;
while(p!=p->next)
{
   for(count=1;count<m;count++)
   {
    pre=p;
    p=p->next;
   }
   cout<<p->data<<endl;
   pre->next=p->next;
   free(p);
   p=pre->next;
}
cout<<p->data<<endl;
free(p);
return(1);
}
//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值