最近在研究c算法,所以写了点东西;不过对数据结构还不是很了解,我无语了我,为了准备某某东西嘛,就不说出来了,因为是新手,而且和也可能和我的学习方法以及悟性有关
感觉一直很颓废,写起来没有那么生动,思考的时候容易遇到瓶颈,而且我感觉算法和数据结构这种东西不是突击就可以出来的,
不过最近我又开始加班了,以后打算长期写下去,希望这个家可以长久一点,一开始本来是在本地计算机的虚拟机里搭建WP的,只是想有个稳定点的家而已。
关于链表的结构还是比较清晰的,就是类似数组类型的简单数据结构,但是在运算以及存储操作等方法上要优于数组,特别是在使用
C/CPP这样的比较接近底层的语言中,因为语言本身没有比较好的高级数据结构,不过就链表的实现来说还是很方便的,在我书写的过程中,主要遇到的困难是,链表指针的传递问题,有好几次我的指针都不知道指向了什么地方,经过相当长时间的刻苦调试终于有了进展,不过参看别人的链表结构我感觉自己的结构还是相当幼稚的,这是我今天做的总结。
下面上程序,希望自己能快点进步,能成为一名ios开发者,加油!
- #include <stdlib.h>
- #include <stdio.h>
- #include <malloc.h>
- //约瑟夫环
- struct joseph{
- int number;
- joseph * next;
- };
- struct joseph * create(int i)
- {
- joseph * h;
- joseph * f;
- joseph * b;
- if(i>1)
- h=(joseph*)malloc(sizeof(joseph));
- else printf("error");
- //h->next=f;
- f=h;
- for(int n=0;n<i;n++)
- {
- joseph * temp=(joseph*)malloc(sizeof(joseph));
- // printf("创建");
- // while(!temp)
- // {
- if(n==(i))
- {
- f=temp;
- f->next=h;
- // printf("调试");
- // return h;
- }
- else{
- b=temp;
- f->next=b;
- b->next=NULL;
- f=b;
- // }
- // temp=NULL;
- }
- }
- return h;
- }
- void init_joseph(joseph * h)
- {
- //joseph * n;
- int i=1;
- while(h->next)
- {
- // n=h;
- h->number=i++;
- h=h->next;
- }
- }
- //删除链表节点操作函数
- void delete_joseph(joseph* h,int round)
- {
- int i=1;
- joseph * temp;
- for(;i<round-1;i++)
- {
- temp=h;
- h=h->next;
- }
- if(temp!=NULL)
- {
- temp->next=temp->next->next;
- }
- }
- joseph* joseph_function(joseph* h,int i,int sum)
- {
- int n=i-1;
- int temp=n;;
- joseph * j;
- joseph * p;
- while(1)
- {
- while(temp--)
- {
- //j=h
- h=h->next;
- }
- temp=n;
- h->next=h->next->next; sum--;
- if(sum==1)
- break;
- }
- return h;
- }
- int main(int argc,char ** argv)
- {
- int jos;
- int step;
- printf("生成约瑟夫换");
- printf("/n");
- scanf("%d",&jos);
- printf("输入步长");
- printf("/n");
- scanf("%d",&step);
- joseph* m=create(jos);
- printf("链表的首地址%o",m);
- printf("/n");
- init_joseph(m);
- joseph * temp=m;
- while(temp->next!=NULL)
- {
- //temp=m;
- printf("%d",temp->number);
- printf(" ");
- temp=temp->next;
- }
- printf("/n");
- joseph * h;
- h=joseph_function(m,step,jos);
- printf("/n");
- printf("最后的胜利者是%d",h->number);
- printf("/n");
- }