(尹承祐の熱血資料構造)第5章/6章

2846 ワード

円形の接続リスト
ポインタ変数headは何を指しますか.
void list plist(データ)/末尾にノードを追加
ノードをvoid list plist(データ)/ヘッダに追加
円形接続リストadt
void ListInit(List plist);
void LInsert(List plist, LData data);
void LInsertFront(List plist, Data data);
int LFirst(List plist, Data pdata);
int LNext(List plist, Data pdata);
Data LRemove(List plist);
int LCount(List * plist);
円形接続リストmain関数
#include <stdio.h>
#include "CLinkedList.h"
int main(void) {
	List list;
	int data, i, numNode;
	ListInit(&list);
	LInsert(&list, 3);
	LInsert(&list, 4);
	LInsert(&list, 5);
	LInsertFront(&list, 2);
	LInsertFront(&list, 1);
	if(LFirst(&list, &data)) {
		printf("%d ", data);
		for(i = 0; i < LCount(&list) * 3 - 1; i++) {
			if(LNext(&list, &data))
				printf("%d ", data);
		}
	}
	printf("\n");
	numNode = LCount(&list);
	if(numNode != 0) {
		LFirst(&list, &data);
		if(data%2 == 0)
			LRemove(&list);
		for(i = 0; i < numNode - 1; i++) {
			LNext(&list, &data);
			if(data%2 == 0)
				LRemove(&list);
		}
	}
	if(LFirst(&list, &data)) {
		printf("%d ", data);
		for(i = 0; i < LCount(&list) - 1; i++) {
			if(LNext(&list, &data))
				printf("%d ", data);
		}
	}
	printf("\n");
	return 0;
}
インプリメンテーション
1.リストを初期化し、ノードを挿入する
2.クエリーデータ
3.ノードの削除
スタックadt
void StackInit(Stack pstack);
int SIsEmpty(Stack pstack);
void SPush(Stack pstak, Data data);
Data SPop(Stack pstack);
Data SPeek(Stack *pstack);
配列ベースのスタックマスター関数
#include <stdio.h>
#include "ArrayBaseStack.h"
int main(void) {
	Stack stack;
	StackInit(&stack);
	SPush(&stack, 1);SPush(&stack, 2);
	SPush(&stack, 3);SPush(&stack, 4);
	SPush(&stack, 5);
	while(!SIsEmpty(&stack)) {
		printf("%d ", SPop(&stack));	
	}
	printf("\n");
	return 0;
}
接続ベースのスタックマスター関数
#include <stdio.h>
#include "ListBaseStack.h"
int main(void) {
	Stack stack;
	StackInit(&stack);
	SPush(&stack, 1);SPush(&stack, 2);
	SPush(&stack, 3);SPush(&stack, 4);
	SPush(&stack, 5);
	while(!SIsEmpty(&stack)) {
		printf("%d ", SPop(&stack));	
	}
	printf("\n");
	return 0;
}