1.自己实现课上写的代码功能
2.实现双向链表的任意位置删除
//main.c
#include "dblist.h"
int main(int argc, const char *argv[])
{
dblist *p=db_create();
printf("从头插入数据:\n");
db_headin(p,77);
db_headin(p,71);
db_headin(p,76);
db_show(p);
printf("从尾插入数据:\n");
db_tailin(p,51);
db_tailin(p,57);
db_tailin(p,55);
db_show(p);
printf("指定位置插入数据:\n");
db_inpost(p,6,100);
db_show(p);
printf("指定位置删除数据:\n");
db_delpost(p,4);
db_show(p);
return 0;
}
//dblist.h
#ifndef __DBLIST_H__
#define __DBLIST_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct dblist
{
union
{
int len;
int data;
};
struct dblist *s1;
struct dblist *s2;
}dblist;
//创建双向链表
dblist *db_create();
//插入数据(头插)
dblist *db_headin(dblist *p,int data);
//判空
int db_empty(dblist *p);
//输出数据
dblist *db_show(dblist *p);
//尾插
dblist *db_tailin(dblist *p,int data);
//指定位置插入数据
dblist *db_inpost(dblist *p,int post,int data);
//指定位置删除数据
dblist *db_delpost(dblist *p,int post);
#endif
//dblist.c
#include "dblist.h"
//创建双向链表
dblist *db_create()
{
dblist *p=(dblist *)malloc(sizeof(dblist));
if(p==NULL)
{
printf("申请失败\n");
return NULL;
}
else
{
printf("申请成功\n");
}
p->len=0;
p->s1=NULL;
p->s2=NULL;
return p;
}
//插入数据(头插)
dblist *db_headin(dblist *p,int data)
{
dblist *temp=(dblist *)malloc(sizeof(dblist));
if(temp==NULL)
{
return NULL;
}
temp->data=data;
if(p->s2==NULL)
{
p->s2=temp;
temp->s1=p;
temp->s2=NULL;
}
else
{
temp->s2=p->s2;
p->s2=temp;
temp->s1=p;
p->s2->s1=temp;
}
return p;
}
//判空
int db_empty(dblist *p)
{
if(p==NULL)
{
printf("error:(\n");
return -1;
}
return p->s2==NULL?1:0;
}
//输出数据
dblist *db_show(dblist *p)
{
p=p->s2;
while(p!=NULL)
{
printf("%-5d",p->data);
p=p->s2;
}
puts("");
return p;
}
//尾插
dblist *db_tailin(dblist *p,int data)
{
while(p->s2!=NULL)
{
p=p->s2;
}
dblist *temp=(dblist *)malloc(sizeof(dblist));
if(temp==NULL)
{
return NULL;
}
temp->data=data;
p->s2=temp;
temp->s1=p;
temp->s2=NULL;
return p;
}
//指定位置插入数据
dblist *db_inpost(dblist *p,int post,int data)
{
int count=0;
dblist *temp=(dblist *)malloc(sizeof(dblist));
if(temp==NULL)
{
return NULL;
}
while(p!=NULL)
{
if(post==(count+1))
{
temp->data=data;
if(p->s2==NULL)
{
p->s2=temp;
temp->s1=p;
temp->s2=NULL;
}
else
{
temp->s2=p->s2;
temp->s1=p;
p->s2->s1=temp;
p->s2=temp;
}
}
p=p->s2;
count++;
}
return p;
}
//指定位置删除数据
dblist *db_delpost(dblist *p,int post)
{
int count=0;
while(p!=NULL)
{
if(post==(count+1))
{
dblist *pa=p->s2;
if(pa->s2==NULL)
{
p->s2=NULL;
}
else
{
p->s2=pa->s2;
pa->s2->s1=p;
}
free(pa);
pa=NULL;
}
p=p->s2;
count++;
}
return p;
}
3.尝试实现约瑟夫环
4.输入一个三位数,使用递归实现,按位输出
#include <stdio.h>
#include <math.h>
int num_out(int num);
int main(int argc, const char *argv[])
{
int num;
printf("请输入一个三位数:");
scanf("%d",&num);
for(int i=2;i>=0;i--)
{
printf("%d\n",num_out(num));
num=num%(int)(pow(10,i));
}
return 0;
}
int num_out(int num)
{
if(num>0 && num<10)
{
return num;
}
else
{
return num_out(num/10);
}
}
5.完成Xmind思维导图