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); } // |