원형 연결 리스트
포인터 변수 head가 무엇을 가리키느냐에 있다.
void LInsert(List plist, Data data) // 꼬리에 노드를 추가
void LInsert(List plist, Data data) // 머리에 노드를 추가
원형 연결 리스트 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);
배열 기반 stack main 함수
#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; }
연결 기반 stack main 함수
#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; }