数据结构和算法-线性表17
//要求实现输入一个数使得26个字母排列发生变化,正整数循环左移,负整数循环右移。#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define OK 1
#define ERROR 0
typedef char ElemType;
typedef int Status;
typedef struct DualNode
{
ElemType data;
struct DualNode *prior;
struct DualNode *next;
}DualNode,*DuLinklist;
Status InitList(DuLinklist *L)//初始化
{
DualNode *p,*q;
int i;
// *L=(DuLinklist)malloc(sizeof(DualNode));
*L=(DualNode*)malloc(sizeof(DualNode));
if(!(*L))//判断链表是否创建失败
{
return ERROR;
}
(*L)->next=(*L)->prior=NULL;//头结点,为空
p=(*L);
for(i=0;i<26;i++)
{
q=(DualNode*)malloc(sizeof(DualNode));
if(!q)
{
return ERROR;
}
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 OK;
}
void paixu(DuLinklist *L,int i)
{
int j;
if(i>0)
{
do
{
(*L)=(*L)->next;
}while(--i);//为什么do while,因为有头结点,空
}
if(i<0)
{
(*L)=(*L)->next->prior;//先将头指针指向第一个结点
do
{
(*L)=(*L)->prior;
}while(++i);
}
}
int main()
{
DuLinklist L;
int i,n;
InitList(&L);
printf("请输入与一个整数:");
scanf("%d",&n);
printf("\n");
paixu(&L,n);
for(i=0;i<26;i++)
{
L=L->next;
printf("%c->",L->data);
}
printf("\n");
return 0;
}
页:
[1]