您的位置:首页 > 编程语言

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

2014-11-19 12:46 369 查看
/* 实现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 );
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: