利用双向循环链表解决比较棘手的输出问题

就是输出字母的一道题目,题目是这样的:
有A-Z个字母 正序排放,现如果输入一个正数N,那么前面N个数就会最后输入,如果输入的是一个负数N,那么 后面的N个数就先输出

博主刚学完双向循环链表,感觉做这个 非常的简单,(但是如果没学的话,做起来无解 ,可能是博主太笨啦┭┮﹏┭┮)
在这里插入图片描述
在这里插入图片描述

代码如下

#include<stdio.h>
#include<stdlib.h>
#define len sizeof(list)
struct list 
{char data ;
struct list *prior;//前驱结点
struct list *next; //后驱结点
};
list *head,*s,*p,*end; int n=0;

void create( int n)
{ head=s=(list *)malloc(len);

	int i =0;
	char alth =65;
  while(i<n)
  { 
	p=(list *)malloc(len);
	s->data=alth++;//创建字母
	s->next=p; 
	 p->prior=s;
	 i++;
	 s=p;
  }
  p=s;
  s->prior->next=head;
  head->prior=s->prior; 
  end=s->prior;
free(s);
}
void print(struct list *head,int a ) //顺序读取
{struct list *p;
p=head; 
n=0;
do{
 printf("%c ",p->data);
 p=p->next;
 n++;
}while(n<a);//因为是个环,我规定 一次就 停止读取 啦
printf("\n NOW, these %d records are: \n ",n);


}   

void insert(struct list *head)
{ struct list *p;
	printf("请输入要插入数据的位置\n");
	int x;
	scanf("%d",&x);
	p=head; 
	int i=1;
	printf("请输入你要插入的数据 : 输入格式-->data(整数)<-- \n");

	struct list *s;
	s=(struct list *)malloc(len);
	scanf("%d",&s->data);


		while(p&&i<x-1)
			
		{p=p->next;
	     i++;
		}
s->next=p->next; 
p->next =s;
	s->prior=p;	
		p->next->next->prior=s;
	
} 
list *head1;
list *end1;

list * move(list *p)
 { 
   int a ;
   p=head;
   scanf("%d",&a);
   if(a>=0)
   { int i=1;
      while(i<=a)
	  { p=p->next; //好简单,头结点后移
	  i++;
	  }
	  head1=p;
	  return head1;//然后返回头结点

   }
   else{
    p=head;
	while(a<0)
	{ a++;//这个也好理解,头结点往前移动 ,移到恰当位置就当做头结点啦~
	  p=p->prior;
	}
	return p;

   
   }
 
 }

int main()
{
 list *p;
 create(26); //创建a个结点
 printf("请你输入偏移的位置是多少\n");
 print(head,26);
p=move(head);
print(p,26);
 return 0;

}

各位读者们,请努力学习,做个合格的程序员

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是牛大春呀

老板糊涂啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值