연결리스트 함수 만드는것좀 도와주세요..
미국녀
질문 제목 : 디버깅 오류만 나내요..어디서부터 틀렷는지도모르겟고 디버그오류도 다고쳤는데 실행이안되요..질문 내용 :
#ifndef xlist_h_20110406_100000
#define xlist_h_20110406_100000
///////////////////////////////////////////////////
#include stddef.h
struct xnode {
void *data; // 저장된 데이터의 포인터
xnode *prev; // 이전 xnode를 가리키는 포인터
xnode *next; // 다음 xnode를 가리키는 포인터
xnode(void *data) // 생성자 파라메터는 데이터를 가리키는 포인터(데이터의 주소)
{
prev = next = null;
this-data = data;
}
};
///////////////////////////////////////////////////////////
class xlist {
//head: 맨 앞의 노드를 가리키는 포인터
xnode *head;
//tail: 맨 뒤의 노드를 가리키는 포인터
xnode *tail;
//ptr: 리스트 내의 특정노드를 가리키는 포인터 (사용자가 원하는 노드를 가리키도록 하는데 사용됨)
// ptr의 값은 처음에는 맨 앞의 노드를 가리키고 있으나 move~함수를 사용하여
// list내에서 앞 뒤로 이동 할 수 있다.
// ptr의 값은 move~ 함수에 의해서만 변경될 수 있다.
// ptr의 값은 리스트가 비어 있는 경우 이외에는 null값을 가질 수 없다.
xnode *ptr;
xnode *new_node;
public:
/////////////////////////////////////////////////////////////////////////////////////
//reset: 리스트 내의 모든 노드를 삭제하고 리스트를 처음의 상태로 초기화 하는 함수
// 파라메터인 bdelete가 true이면 삭제한 노드가 가지고 있던 데이터도 삭제(delete)
long reset(bool bdelete){ //질문
if( bdelete == true ){
head = null;
tail = null;
ptr = null;
}
return 0;
}
//생성자: 포인터의 값을 모두 null로 초기화
xlist() {head=tail=ptr=null;}
//소멸자: 모든 노드를 삭제하고 초기의 empty 상태로 돌아간다
~xlist() {reset(false);}
/////////////////////////////////////////////////////////////////////////////////////
//리스트에 노드가 하나도 없으면 true를 return 그렇지 않으면 false를 return;
bool isempty() {return (ptr==null);}
/////////////////////////////////////////////////////////////////////////////////////
//리스트에 노드가 한개만 있는 경우 true를 return 그렇지 않으면 false를 return;
bool isoneandonly() { return (ptr && (head==tail)); }
/////////////////////////////////////////////////////////////////////////////////////
//ptr이 가리키는 노드가 맨 앞의 노드이면 true를 return 그렇지 않으면 false를 return
bool isfirst() {return (ptr && (ptr==head));}
/////////////////////////////////////////////////////////////////////////////////////
//ptr이 가리키는 노드가 맨 뒤의 노드이면 true를 return 그렇지 않으면 false를 return
bool islast() {return (ptr && (ptr==tail));}
/////////////////////////////////////////////////////////////////////////////////////
//ptr의 값이 현재의 위치에서부터 n번 이동한 위치의 노드를 가리키도록 지정;
//n값이 양수이면 앞으로(다음 노드 방향으로), n값이 음수이면 뒤로(이전 노드 방향으로) 이동
//return값: 실제로 이동한 횟수를 return(지정된 횟수를 이동하기 전에 리스트의 끝을 만나면
// 실제 이동한 횟수는 지정된 이동수보다 작을 수 있음)
long move(long n){
int count= 0;
if(n0){
while(n){
ptr-next;
count++;
if(islast())
break;
}
}
else if(n0){
while(-n){
ptr-prev;
count++;
if(isfirst())
break;
}
}
return return count;
}
/////////////////////////////////////////////////////////////////////////////////////
//ptr의 값이 맨 앞의 노드를 가리키도록 지정
//return값: 리스트가 비어있으면 0을, 그렇지 않으면 -1을 return;
long movefirst(){
ptr = head;
if(isempty())
return 0;
else
return -1;
}
/////////////////////////////////////////////////////////////////////////////////////
//ptr의 값이 맨 마지막의 노드를 가리키도록 지정
//return값: 리스트가 비어있으면 0을, 그렇지 않으면 1을 return;
long movelast(){
ptr = tail;
if(isempty())
return 0;
else
return -1;
}
/////////////////////////////////////////////////////////////////////////////////////
//movenext: ptr을 다음 노드로 이동(move(1)과 같음)
long movenext(){
return move(1);
}
/////////////////////////////////////////////////////////////////////////////////////
//moveprev: ptr을 이전 노드로 이동(move(-1)과 같음)
long moveprev(){
return move(-1);
}
/////////////////////////////////////////////////////////////////////////////////////
//setpos: ptr이 파라메터로 주어진 인덱스에 해당하는 노드를 가리키도록 지정(인덱스는 0부터 시작)
bool setpos(long index){
movefirst();
move(index);
return true;
}
/////////////////////////////////////////////////////////////////////////////////////
//readdata: ptr이 가리키고 있는 노드의 데이터를 return;
// 리스트가 비어 있으면 null을 return;
void *readdata(){
if(isempty())
return null;
else
return ptr-data;
}
/////////////////////////////////////////////////////////////////////////////////////
//swapdata: ptr이 가리키고 있는 노드의 기존의 데이터를 새 데이터로 교환하고 기존 데이터를 return;
// 리스트가 비어 있으면 null을 return;
void *swapdata(void *data)
{
new_node - data = data;
if (isempty()){
return null;
}
else
ptr-data = data;
return new_node-data;
}
/////////////////////////////////////////////////////////////////////////////////////
//finddata: 파라메터로 주어진 data와 같은 값의 데이터를 가지고 있는 노드를 발견하면 ptr이 이 노드를 가리키도록 하고 true를 return
bool finddata(void *data){
ptr = head;
while(ptr -next != null){
ptr = ptr-next;
if(ptr-data = data)
break;
}
return true;
}
/////////////////////////////////////////////////////////////////////////////////////
//insertnext: ptr이 가리키는 노드의 다음에 새로운 노드(data를 값으로 갖는)를 생성하여 끼워넣는 함수
// 리스트가 비어 있으면 첫번째 노드로 삽입;
// ptr은 새로 insert된 노드를 가리킨다.
// return값: insert 한 data를 return
void *insertnext(void *data){
if(isempty()){
head-data=data;
movefirst();
}
else{
new_node - data = data;
new_node -next = ptr-next;
ptr-next = new_node;
}
return ptr-data;
}
/////////////////////////////////////////////////////////////////////////////////////
//insertprev: ptr이 가리키는 노드의 이전에 새로운 노드(data를 값으로 갖는)를 생성하여 끼워넣는 함수
// 리스트가 비어 있으면 첫번째 노드로 삽입;
// ptr은 새로 insert된 노드를 가리킨다.
// return값: insert 한 data를 return
void *insertprev(void *data){
if(isempty()){
head-data = data;
movefirst();
}
else{
new_node - data = data;
new_node - prev = ptr - prev;
ptr - prev = new_node;
}
return new_node - data;
}
/////////////////////////////////////////////////////////////////////////////////////
//insertfirst: 리스트의 맨 앞에 data를 붙여넣는 함수
// ptr은 새로 insert된 노드를 가리킨다.
// return값: insert 한 data를 return
void *insertfirst(void *data){
if(isfirst()){}
return insertprev(data);
}
/////////////////////////////////////////////////////////////////////////////////////
//insertlast: 리스트의 맨 뒤에 data를 붙여넣는 함수
// ptr은 새로 insert된 노드를 가리킨다.
// return값: insert 한 data를 return
void *insertlast(void *data){
if(islast()){ }
return insertnext(data);
}
/////////////////////////////////////////////////////////////////////////////////////
//remove: ptr이 가리키는 노드를 삭제하고 노드가 가지고 있던 사용자 데이터는 return한다.
// 만약 리스트가 비어 있으면 null을 return;
// 삭제한 후 ptr의 값:
// 1. 다음 노드가 있으면 다음 노드를 가리키도록 지정,
// 2. 다음 노드가 없으면 이전 노드를 가리키도록 지정
// 3. 삭제할 노드가 마지막 노드이면 head, tail, ptr은 null로 초기화
// return값: delete 한 노드의 data를 return;
void *remove(){
if(isempty())
return null;
}
};
//////////////////////////////////////////////////
#endif
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |