⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symmetri.bak

📁 一些关于数据结构的C语言实现源码
💻 BAK
字号:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

#define MAXSTRLEN	20
struct charnode{
    char  value;
    struct charnode* next;
};

struct charnode *head = NULL;	//head of the link
int    input_string_length;

void init_link( char* buffer )
{
    int i;
    struct charnode *p, *q;
    for( i=0; i<strlen(buffer); i++ ){
	p = (struct charnode *)malloc( sizeof( struct charnode ) );
	p->value = buffer[i];
	p->next = NULL;
	if( head == NULL ){
	    head = p;
	    q = p;
	    continue;
	}
	q->next = p;
	q = p;
    }
}

void free_link()
{
    struct charnode *p, *q;
    for( p=head; p!=NULL; ){
	q = p;
	p = q->next;
	free( q );
    }
}

//This is a generic function, it retrieve the current value, and step further
// by this way, the action of retrieve value can be independant from specific
// storage method.
//In this function, i have implemented that for the link.
//  if the storager is a stack or simply a array, only this function worth changing
//The return value is the character
char retrieve_value()
{
    static struct charnode *p = NULL;
    if (p == NULL) p = head;
    else p = p->next;
    return p->value;
}

//if the string is symmetric, return 0, else return value != 0
int is_symmetric()
{
    char left_string[MAXSTRLEN];	//left string
    char right_string[MAXSTRLEN];	//right string
    int i;

    for( i=0; i<input_string_length/2; i++ )	//copy left part
	left_string[i] = retrieve_value();
    left_string[i]='\0';
    if( input_string_length%2 ) retrieve_value(); //for odd string length

    for( i=0; i<input_string_length/2; i++ )	//copy right part
	right_string[input_string_length/2-i-1] = retrieve_value();
    right_string[i]='\0';
    return strcmp( left_string, right_string );
}

void main()
{
    char buffer[MAXSTRLEN];

    puts( "Please input a string:" );
    gets( buffer );
    printf( "This string is:%s.\n", buffer );
    if( strlen(buffer) > MAXSTRLEN ){
	printf( "the length of the string should be less than:%d.\n", MAXSTRLEN );
	return;
    }
    input_string_length = strlen(buffer);
    init_link( buffer );
    if ( !is_symmetric() ){
	printf( "The string is symmetric!\n");
    }else{
	printf( "The string is NOT symmetric!\n" );
    }
    free_link();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -