728x90
반응형
[문제] 스택을 이용한 연결리스트를 구현하라.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*연결 리스트를 구현할 구조체*/
typedef struct ListNode{
int data;
int max;
int num;
struct ListNode* next;//자가 참조 구조체
/*다음 노드의 주소를 저장할 자기참조 구조체포인터*/
}ListNode;
int Push(ListNode *head,int val){
int cnt = 1;
ListNode* check = head; //순회용 노드 생성
// printf(">val: %d\n",val);
while(check->next != NULL){
cnt ++;
check = check->next;
}
if(head->max <= cnt) return -1;
ListNode* new = (ListNode *)malloc(sizeof(ListNode));
check ->next = new;
new->data = val;
new-> next = NULL;
// printf("푸시된 데이터의 개수: %d\n",cnt);
head-> num = cnt;
return 0;
}
int Pop(ListNode *head){
int val;
if(head->num <= 0) return -1;
ListNode* check = head; //순회용 노드 생성
while(check->next != NULL){check = check->next;}
val = check->data;
check = NULL;
head->num --;
return 0;
}
int Peek(ListNode *head){
int pek;
if(head->num <= 0) return -1;
ListNode* check = head; //순회용 노드 생성
pek = check->data;
printf("pek: %d\n",pek);
return 0;
}
void Clear(ListNode *head){
ListNode* check = head; //순회용 노드 생성
check->next = NULL;
}
int Capacity(ListNode *head){return head->max;}
int Size(ListNode *head){return head->num;}
int isEmpty(ListNode *head){return (head->num <= 0);}
int isFull(ListNode *head){
return( head-> num >= head->max);
//스택의 데이터 개수가 스택의 최대 용량보다 많으면 1 반환
//스택의 데이터 개수가 스택의 최대 용량보다 적으면 0 반환
}
/*스택에서의 검색*/
int Search(ListNode *head,int key){
//스택의 개수만큼 꼭대기에서 부터 선형 검색
int cnt = 0;
ListNode* check = head; //순회용 노드 생성
// printf(">val: %d\n",val);
while(check->next != NULL){
check = check->next;
if(check->data == key) return cnt;
cnt ++;
}
return -1;
}
void Print(ListNode *head){
ListNode* check = head; //순회용 노드 생성
int cnt = 0;
// printf(">val: %d\n",val);
while((head->num) > cnt){
check = check->next;
printf("%d ",check->data);
cnt ++;
}printf("\n");
}
728x90
반응형
'Datastructure > [Algorithm]' 카테고리의 다른 글
[자료구조] 스택 ADT (0) | 2022.02.15 |
---|---|
[자료구조] 스택을 사용하는 프로그램 (0) | 2022.02.13 |
[자료구조] 스택의 활용: 배열 (0) | 2022.02.12 |
[자료구조] 검색의 활용 (0) | 2022.02.10 |
[자료구조] 선형 검색 (0) | 2022.02.06 |