코딩 잘 못하는 전자과인데 이번학기에 데이터구조 들으면서 힘듬 ㅠㅠ


질문이 이거고 밑에 k번째 삽입,삭제 하는 큐에대한 소스를 짜봤거든 혼자?

main에서 addq가 실행되면 중단되네 프로그램이 이거 왜그런거야?

이렇게 하는게 맞을까 그리고? 


답변부탁해 고수형들 ㅠㅠ



2. We can maintain a linear list circularly in an array, circle[MAX_SIZE]. We set up front and rear indices similar to those used for a circular queue.


(a) Obtain a formula in terms of front, rear, and MAX_SIZE for the number of elements in the list.


(b) Write a function that deletes the k-th element in the list.


(c) Write a function that inserts an element, item, immediately after the k-th element.


(d) What is the time complexity of your functions for (b) and (c)?





#include <stdio.h>

#define MAX_QUEUE_SIZE 100

#define EXIT_FAILURE -1


typedef struct {

int key;

}element; //구조체 선언


element queue[MAX_QUEUE_SIZE]; // 크기가 MAX_QUEUE_SIZE인 구조체 배열 'queue' 선언


int rear = MAX_QUEUE_SIZE - 10; // rear값 설정

int front = 0; // front값 설정



void addq(int front, int *prear, element item, int k)

{

int i = 0;


*prear = (*prear + 1) % MAX_QUEUE_SIZE; // prear 전진


if (front == *prear) //전진한 prear가 front와 같을경우

printf("queue is full"); // queue = full


else if (k < *prear && k> front) { // 그게아닐경우 k 가 front와 rear 사이의 수 라면

for (i = *prear; i > k - 1; i--) // k+1번째부터 rear까지 element들을 전부 한칸씩 이동

queue[i] = queue[i - 1];


queue[k - 1] = item; // k번째 배열에 item 삽입

}



}


element deleteq(int *pfront, int rear, int k)

{

int i = 0;

element item;

element temp;


if (*pfront == rear) // front == rear 이면 empty

return;


else if (k < rear && k> *pfront) {

temp = queue[k - 1]; // temp에 k번째 원소값 저장


for (i = k-1; i > *pfront; i--) // front부터 k번째까지 데이터값들을 전진

queue[i] = queue[i - 1];


*pfront = (*pfront + 1) % MAX_QUEUE_SIZE; // *pfront를 한칸 전진


}


return temp; // 원래 k번째 요소를 리턴


}


void main() {




int j = 0;

int k = 0;

element item;


for (j = front; j < rear; j++)

queue[j].key = j; // queue배열에 값 저장.


for (j = front; j < rear; j++)

printf("queue[%d] = %d ", j, queue[j]); // 배열에 저장된 값들을 표시


printf("삽입할 위치인 k를 입력하세요. ");

scanf("%d", &k); //삽입할 위치 입력


printf("k에 입력할 값을 입력하세요 ");

scanf("%d", &item); //삽입할 위치에 삽입할 수 입력



addq(front, rear, item, k);


printf("삽인된 요소는 %th element = item 입니다.", &k, &item);


for (j = front; j < rear; j++)

printf("queue[%d] = %d ", j, queue[j]); //삽입이 된 후 배열 출력.





printf("삭제할 위치인 k를 입력하세요. ");

scanf("%d", &k); //삭제할 위치 k 입력.


item = deleteq(front, rear, k);


printf("삭제된 요소는 %dth element = item 입니다.", &k, &item);


for (j = front; j < rear; j++)

printf("queue[%d] = %d ", j, queue[j]); //삭제한 후 배열 출력



}