|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
链表能正确赋值,但不管输入几,输出的都是从A到Z,求大神解答
还有个问题,明明单向循环链表就能解决的问题,小甲鱼为啥用双向
//双向循环链表
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct DualNode
{
char data;
struct DualNode *prior;
struct DualNode *next;
}DualNode,*DuLinkList;
//初始化 把a到z依次赋值
DuLinkList InitList(DuLinkList L)
{
DualNode *p,*q;
int i;
if(!L)
return 0;
L->next=L->prior=NULL;
p=L;
for(i=0;i<26;i++)
{
q=(DuLinkList)malloc(sizeof(DualNode));
if(!q)
return 0;
q->data='A'+i;
q->prior=p;
q->next=NULL;
p->next=q;
p=q;
}
p->next=L->next;
L->next->prior=p;
return L;
}
//算法
DuLinkList Caesar(DuLinkList L,int i)
{
if(i>0)
{
while(i--)
L=L->next;
}
if(i<0)
{
do
{
L=L->prior;
}while(++i);
}
return L;
}
void main()
{
DuLinkList L;
int i,n;
L=(DuLinkList)malloc(sizeof(DualNode));
InitList(L);
printf("请输入一个整数:");
scanf("%d",&n);
Caesar(L,n);
for(i=0;i<26;i++)
{
L=L->next;
printf("%c",L->data);
}
printf("\n");
}
- //双向循环链表
- #include<stdio.h>
- #include<stdlib.h>
- #include<malloc.h>
- typedef struct DualNode
- {
- char data;
- struct DualNode *prior;
- struct DualNode *next;
- }DualNode,*DuLinkList;
- //初始化 把a到z依次赋值
- DuLinkList InitList(DuLinkList L)
- {
- DualNode *p,*q;
- int i;
-
- if(!L)
- return 0;
- L->next=L->prior=NULL;
- p=L;
- for(i=0;i<26;i++)
- {
- q=(DuLinkList)malloc(sizeof(DualNode));
- if(!q)
- return 0;
- q->data='A'+i;
- q->prior=p;
- q->next = p->next; //此处
- p->next=q;
- p=q;
- }
- p->next=L->next;
- L->next->prior=p;
- return L;
- }
- // 双向循环,可前 如:5,可后 如:-5
- void Caesar(DuLinkList *L, int i)
- {
- *L = (*L)->next; // 获取第1个节点的地址
- if(i>0)
- {
- do
- {
- *L = (*L)->next;
- }while(--i);
- }
- if(i<0)
- {
- do
- {
- *L = (*L)->prior;
- }while(++i);
- }
- }
- void main()
- {
- DuLinkList L;
- int i,n;
- L=(DuLinkList)malloc(sizeof(DualNode));
- InitList(L);
- printf("请输入一个整数:");
- scanf("%d",&n);
- Caesar(&L,n); // 后面的 for循环是从 定位好的位置开始的,所以这里要改变头节点的指向,使其指向定位好的位置。
- for(i=0;i<26;i++)
- {
- printf("%c",L->data);
- L=L->next;
- }
- printf("\n");
- }
复制代码
|
-
|