(尹承祐の熱血資料アルゴリズム)第3章/4章

3663 ワード

Abstract Data Type pg74~77
どのオブジェクトの機能がリストされますか.
はい.)財布のadt
1. int take_out_money(wallet pw, int coin_num, int cash_num)
最初のパラメータが住所を伝える財布からお金を出します.
2番目の因子で取り出す硬貨の数を表し、3番目の因子で取り出す紙幣の数を表す.
出さなければならないお金の総額を返し、それに応じたお金の差額もあります.
2. int put_in_money(wallet pw, int coin_num, int cash_num)
最初のパラメータ伝達アドレスの財布にお金を入れます
2番目の因子で入れる硬貨の数を伝え、3番目の因子で入れる紙幣の数を伝えます.
硬貨や紙幣の数は、入れる量が増えるにつれて増えていきます.
シナリオリストを使用してpg 78を実装
1.adt定義
2.adtを使用してmain関数を定義する
3.adt実装リストの使用
アレイadtpg 80
void ListInit(List plist);
void LInsert(List plist, LData data);
int LFirst(List plist, LData pdata);
int LNext(List plist, LData pdata);
LData LRemove(List plist);
int LCount(List * plist);
アレイ主関数pg 81
#include<stdio.h>
#incldue "ArrayList.h"
	int main(void)
    {
    List list;
    int data;
    ListInit(&list);
    LInsert(&list, 11); LInsert(&list,11);
    LInsert(&list, 22); LInsert(&list,22);
    Linsert(&list, 33);
    printf("현재 데이터의 수: %d \n", LCount(&list));
    if(LFirst(&list,&data))
    {
    printf("%d", data);
    while(LNext(&list, &data))
    printf("%d", data);
    }
    printf("\n");
    if(LFirst(&list, &data))
    {
    if(data ==22)
    LRemove(&list);
    while(LNext(&list, &data))
    {
    if(data==22)
    LRemove(&list);
    }
   }
   printf("현재 데이터의 수: %d \n", LCount(&list));
   if(LFirst(&list, &data))
   {
   printf("%d", data);
   while(LNext(&list, &data))
   printf("%d", data);
   }
   printf("\n");
   return 0;
   }
インプリメンテーション
1.ヘッドファイルの定義
2.挿入と照会
3.削除
接続リストを使用したリストの実装
1.adt定義
2.adtを使用してmain関数を定義する
3.adt実装リストの使用
接続リストadtpg 123
void ListInit(List *plist);
void LInsert(List plist, LData data);
int LFirst(List plist, Ldata data);
int LNext(List plist, Ldata data);
LData LRemove(List plist)
int LCount(list plist);
void SetSortRule(List plist, int (comp)(LData d1, LData d2)); =>追加!!
SetSortRule()関数について
返されるのはintで、2つのLDataタイプのパラメータを渡す関数のアドレス値です.
Double Linked list sort main関数pg 150
#include <stdio.h>
#include "DLinkedList.h"
int WhoIsPrecede(LData d1, LData d2) {
	if(d1 < d2)
		return 0;
	else
		return 1;
}
int main(void) {
	List list;
	LData data;
	ListInit(&list);
	SetSortRule(&list, WhoIsPrecede);
	LInsert(&list, 11); LInsert(&list, 11);
	LInsert(&list, 22); LInsert(&list, 22);
	LInsert(&list, 33);
	printf("현재 데이더의 수: %d\n", LCount(&list));
	if(LFirst(&list, &data)) {
		printf("%d ", data);
		while(LNext(&list, &data)) {
			printf("%d ", data);
		}
	}
	printf("\n\n");
	if(LFirst(&list, &data)) {
		if(data == 22)
			LRemove(&list);
		while(LNext(&list, &data)) {
			if(data == 22)
				LRemove(&list);
		}
	}
	printf("현재 데이더의 수: %d\n", LCount(&list));
	if(LFirst(&list, &data)) {
		printf("%d ", data);
		while(LNext(&list, &data)) {
			printf("%d ", data);
		}
	}
	printf("\n\n");
	return 0;
}
インプリメンテーション
1.リストを初期化し、ノードを挿入する
2.クエリーデータ
3.ノードの削除
4.同梱
ヒープノード
すべての場合、同じ挿入手順で「スタックノードベースの接続」リストのロック