现在的位置: 首页 > 综合 > 正文

双向循环链表实现26个英文字母的左右移位完整C代码

2019年04月25日 ⁄ 综合 ⁄ 共 878字 ⁄ 字号 评论关闭
/* 实现26个英文字母的左右移位 */

#include<stdio.h>
#include<stdlib.h>

typedef struct node {
	char data;
	struct node *prior;
	struct node *next;
}Node, *DualCirLink;

DualCirLink CreatLink()
{
	DualCirLink l = (DualCirLink)malloc(sizeof(Node));
	l -> next = l;
	l -> prior = l;
	l -> data = 'a';
	DualCirLink p, q;
	q = l;

	for( int i=1; i<26; i++ ) {
		p = (DualCirLink)malloc(sizeof(Node));
		p -> data = 'a' + i;
		p -> prior = q;
		q -> next = p;
		q = p;
		q -> next = l;
		l -> prior = q;
	}

	return l;
}

DualCirLink ShiftLink( DualCirLink l , int n )
{
	DualCirLink p = l;
	int i;
	if( n>0 ) 
		for( i=0; i<n; i++ )
			p = p -> next;
	else
		for( i=0; i<(-n); i++ )
			p = p -> prior;

	return p;
}

void ShowLink( DualCirLink l )
{
	DualCirLink p = l;
	while( p->next != l ) {
		printf("%c ", p->data);
		p = p -> next;
	}

	printf("%c\n", p->data);
}

void DeleteLink( DualCirLink l )
{
	DualCirLink p, q;
	p = q = l->next;

	while( p != l ) {
		p = q->next;
		free(q);
		q = p;
	}
	free(p);
}

void main()
{
	DualCirLink l = CreatLink();
	ShowLink( l );
	DualCirLink p;
	int n;
	printf("请输入移位的位数: ");
	scanf("%d", &n);
	p = ShiftLink( l, n );
	ShowLink( p );
	DeleteLink ( p );
}

抱歉!评论已关闭.