day 15 作业

一、普通双链题目

typedef struct Nood
{
  union
  {
    int len;
    int data;
  };
 struct Nood *Prev;
 struct Nood *Next;
}*db_link;
db_link creat(int flag);//建立
int insertwei(db_link L,int m);//尾插
void disp(db_link L);//显示
void delewei(db_link L,int x);//按位删除
void updatewei(db_link L,int x,int m);//按位修改x位改位m
void serchwei(db_link L,int x);//按位查找

int main()
{
 int n;
 int i;
 int x;
 db_link L=creat(0);
 printf("请输入要插入的元素个数:");
 scanf("%d",&n);
for(i=0;i<n;i++)
{
   scanf("%d",&x);
   insertwei(L,x);
}
disp(L);
printf("请输入要删除第几个数:");
scanf("%d",&n);
delewei(L,n);
disp(L);
printf("请输入要改的位置及要改成的数");
scanf("%d %d",&n,&i);
updatewei(L,n,i);
disp(L);
printf("请输入要查找的位次");
scanf("%d",&x);
serchwei(L,x);

return 0;
}
db_link creat(int flag)
{
  db_link L=(db_link)malloc(sizeof(db_link));
  if(flag==0)
      L->len=0;
  else
      L->data=0;
  L->Prev=NULL;
  L->Next=NULL;
  return L;
};
int insertwei(db_link L,int m)
{
  db_link s=creat(0);
  if(s==NULL)
      return -1;
  db_link p=L;
  while(p->Next != NULL)
      p=p->Next;
  s->data=m;
  p->Next=s;
  s->Prev=p;
  L->len++;
  return 0;
}
void disp(db_link L)
{
   if(L==NULL || L->len==0)
       return;
   db_link p=L;
  while(p->Next != NULL) 
  {
     printf("%d\t",p->Next->data);
     p=p->Next;
  }
  printf("\n");
}

void delewei(db_link L,int x)
{
  if(L==NULL || L->len==0 || x<1 || x>L->len)
  {
    puts("删除不成功");
    return;
  }  
 db_link p=L;
 for(int i=0;i<x;i++)
     p=p->Next;
  p->Prev->Next=p->Next;
  if(p->Next != NULL)
      p->Next->Prev=p->Prev;
  free(p);
   p=NULL;
  L->len--;
}

void updatewei(db_link L,int x,int m)
{
  if(L==NULL || L->len==0 || x<1 || x>L->len)
  {
     puts("修改失败");
     return;
  }
  db_link p=L;
  for(int i=0;i<x;i++)
  {
   p=p->Next;
  }
  p->data=m;
}

void serchwei(db_link L,int x)
{
  if(L==NULL || x<1 || x>L->len || L->len==0)
  {
   puts("查找失败");
   return;
  }
  db_link p=L;
 for(int i=0;i<x;i++)
 {
  p=p->Next;
 }
 printf("第%d位数位 %d\n",x,p->data);
}
二、循环双链

#include <stdio.h>
#include <stdlib.h>
typedef struct Nood
{
  union
  {
    int len;
    int data;
  };
 struct Nood *Prev;
 struct Nood *Next;
}*db_link;

db_link creat(int flag);//建立
int insertwei(db_link L,int m);//尾插
void disp(db_link L);//输出
void delewei(db_link L);//尾删
void inserthead(db_link L,int m);//头插
void delehead(db_link L);//头删

int main()
{
 int n;
 int i;
 int x;
 db_link L=creat(0);
 printf("请输入要尾部插入的元素个数:");
 scanf("%d",&n);
for(i=0;i<n;i++)
{
   scanf("%d",&x);
   insertwei(L,x);
}
disp(L);
printf("尾部删除一个试试\n");
delewei(L);
disp(L);
printf("请输入要头部插入的元素个数:");
scanf("%d",&n);
printf("请输入要插入的元素\n");
for(i=0;i<n;i++)
 {
   scanf("%d",&x);
   inserthead(L,x);
  }
disp(L);
printf("头部删除一个试试\n");
delehead(L);
disp(L);
return 0;
}

db_link creat(int flag)
{
  db_link L=(db_link)malloc(sizeof(db_link));
  if(flag==0)
      L->len=0;
  else
      L->data=0;
  L->Prev=L;
  L->Next=L;
  return L;
};
int insertwei(db_link L,int m)
{
   if(L==NULL)
       return -1;
   db_link s=creat(0);
   db_link p=L;
   while(p->Next != L)
              p=p->Next;
   s->data=m;
   s->Next=L;
   s->Prev=p;
   p->Next=s;
   L->Prev=s;
   L->len++;
  return 0;
}

void disp(db_link L)
{
   if(L==NULL)
       return;
   db_link p=L;
  while(p->Next != L) 
  {
     printf("%d\t",p->Next->data);
     p=p->Next;
  }
  printf("\n");
}

void delewei(db_link L)
{
  if(L==NULL || L->len==0 )
  {
    puts("删除不成功");
    return;
  }  
 db_link p=L->Prev;
 p->Prev->Next=L;
 L->Prev=p;
 free(p);
 L->len--;
}
void inserthead(db_link L,int m)
{
  if(L==NULL)
  {
    puts("前面插入失败");
    return;
  }
    db_link s=creat(0);
   s->data=m;
   s->Next=L->Next;
   s->Prev=L;
   L->Next=s;
   L->Next->Prev=s;
   L->len++;
}

void delehead(db_link L)
{
    if(L==NULL || L->len==0)
    {
      puts("删除失败");
      return;
    }
   db_link p=L->Next;
   p->Next=L->Next;
   p->Next->Prev=L;
   L->len--;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值