就是输出字母的一道题目,题目是这样的:
有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;
}
各位读者们,请努力学习,做个合格的程序员