数据结构:关于字典的各种操作,含菜单(C/C++)

#include <stdio.h>
#include <stdlib.h>
#define DATATYPE_DIC_KEY int
#define DATATYPE_DIC_VALUE int
typedef struct dicelement
{
	DATATYPE_DIC_KEY key;
	DATATYPE_DIC_VALUE value;
} dicnode;

typedef struct dictionary
{
	int max_length;
	int length;
	dicnode *list;
} *pdictionary;

pdictionary createNewDictionary(int max)
{
	pdictionary newdic = (pdictionary)malloc(sizeof(struct dictionary));
	if(newdic != NULL)
	{
		newdic->list = (dicnode *)malloc(sizeof(dicnode)*max);
		if(newdic->list != NULL)
		{
			newdic->max_length = max;
			newdic->length = 0;
		}
		else
			printf("Memory overflow!\n");
	}
	else
		printf("Memory overflow!\n");
	return newdic;
}

int addinfo(pdictionary dic, dicnode node)
{
	if(dic->length < dic->max_length)
	{
		dic->list[dic->length].key = node.key;
		dic->list[dic->length].value = node.value;
		dic->length++;
	}
	else
		return 0;
	return 1;
}


int search_seq(pdictionary dic, DATATYPE_DIC_KEY target)
{
	int i = 0;
	for(i = 0; i < dic->length; i++)
	{
		if(dic->list[i].key == target)
			return i;
	}
	return -1;
}

int search_bin(pdictionary dic, DATATYPE_DIC_KEY target)
{
int low,high,mid;
low=0;high=dic->length-1;
while(low<=high)
{
mid=(low+high)/2;
if(target==dic->list[mid].key)
return mid;
else
   {

    if(target<dic->list[mid].key)
    high=mid-1;
    else
    low=mid+1;
   }

}
return -1;


}

int sort_dic(pdictionary dic)
{
	int i, j;
	DATATYPE_DIC_KEY tmp_key;
	DATATYPE_DIC_VALUE tmp_value;

	for(i = dic->length-1; i > 0; i--)
	{
		for(j = 0; j < i; j++)
		{
			if(dic->list[j].key > dic->list[j+1].key)
			{
				tmp_key = dic->list[j].key;
				tmp_value = dic->list[j].value;
				dic->list[j].key = dic->list[j+1].key;
				dic->list[j].value = dic->list[j+1].value;
				dic->list[j+1].key = tmp_key;
				dic->list[j+1].value = tmp_value;
			}
		}
	}
	return 0;
}

int deleteinfo(pdictionary dic, DATATYPE_DIC_KEY target)
{
     int x=search_seq(dic,target);
    
     int q=0;
     if(x==-1){
        printf("error: the value can't find!!!!!!!");
        }
        else{
            for(q=x;q<dic->length-1;q++)
		{
         dic->list[q].key=dic->list[q+1].key;
          dic->list[q].value=dic->list[q+1].value;
        }
      dic->length-=1;
      	printf("\ndelete success!");
        }



}

void print_dic(pdictionary dic)
{
	int i;
    printf("\nposition");
	for(i = 0; i<dic->length; i++)
	{
		printf("%5d ", i);
	}
	printf("\nkey\t");
	for(i = 0; i<dic->length; i++)
	{
		printf("%5d ", dic->list[i].key);
	}
	printf("\nvalue\t");
	for(i = 0; i<dic->length; i++)
	{
		printf("%5d ", dic->list[i].value);
	}
}

int isEmptyDic(pdictionary dic)
{
	if(dic == NULL || dic->length == 0)
		return 1;
	return 0;
}

int main()
{
	int in,c;
	pdictionary dic = NULL;
	dicnode node;

	while(1)
	{
		printf("\n");
		printf("\t\t\t ==============================\n");
		printf("\t\t\t ============Dictionary Menu   ==========\n");
		printf("\t\t\t ==============================\n");
		printf("\t\t\t||   (1)create dic            ||\n");
		printf("\t\t\t||   (2)insert ele            ||\n");
		printf("\t\t\t||   (3)delete ele            ||\n");
		printf("\t\t\t||   (4)sequence search       ||\n");
		printf("\t\t\t||   (5)binary search         ||\n");
		printf("\t\t\t||   (6)sort                  ||\n");
		printf("\t\t\t||   (7)print                 ||\n");
		printf("\t\t\t||   (0)exit                  ||\n");
		printf("\t\t\t ==============================\n");
		printf(">>>Please enter command code : ");
		scanf("%d", &in);
		switch(in)
		{
			case 1:
				printf("\nPlease input the length dic:");
				scanf("%d", &in);
				dic = createNewDictionary(in);
				printf("\nCreate Success!!!");
				break;
			case 2:
				printf("\nkey:");
				scanf("%d", &node.key);
				printf("\nvalue:");
				scanf("%d", &node.value);
				addinfo(dic, node);
				printf("\ninsert success!");
				break;
			case 3:
				printf("\nThe delete key is:");
				scanf("%d", &in);
				deleteinfo(dic, in);
			
				break;
			case 4:
				printf("\nThe search key is:");
				scanf("%d", &in);
				in = search_seq(dic, in);
				if(in > -1)
				{
					printf("\nsearch success!");
					printf("\nthe search result: %d", in);
				}
				else
					printf("\nThe key not founded!");
				break;
				case 5:
					printf("\nThe search key is:");
	                scanf("%d",&in);
				    c=search_bin(dic,in);
				    if(c==-1)
				    printf("not found!!!!!");
					else 
				    printf("\nThe position of key is: %d",c);
					break;	
			   case 6:
				sort_dic(dic);
				printf("\nThe sort result is:");
				print_dic(dic);
				printf("\nThe search key is:");
				scanf("%d", &in);
				in = search_bin(dic, in);
				if(in > -1)
				{
					printf("\nsearch success");
					printf("the search result: %d", in);
				}
				else
					printf("\nThe key not founded!");
				break;
			case 7:
				printf("\nThe dic is:\n");
				print_dic(dic);
				break;
			case 0:
				return 0;
				break;
			default:
				printf("illegal command!\n");

		}
	}
}

qq:1351006594

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaron_Liu0730

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值