단일 체인 시트 생 성, 삽입, 삭제

인터넷 자 료 를 본 다음 에 쓴 단일 체인 시트 의 생 성, 삽입, 삭제 등에 관 한 코드 연습 자, 코드 에 bug 가 존재 하 므 로 참고 하 시기 바 랍 니 다.
#include <stdio.h>
#include <stdlib.h>

//1.        
struct node 
{
    int num;
    struct node *next;
};

//    
struct node *creat(struct node *head);
void print(struct node *head);
struct node *del(struct node *head,int num);
struct node *insert(struct node *head,int num,int count);
int n = 0;  //     

int main()
{
    int num = 0,count = 0;
    struct node *head;
    head = NULL;        //2.      

    //  
    printf("************************  **********************
"
); head = creat(head); // print(head); // // printf("************************ **********************
"
); printf(" :
"
); scanf("%d",&num); printf("num is %d
"
,num); head = del(head,num); print(head); // while(1) { printf("************************* *********************
"
); printf(" :1---%d:::::",n+1); scanf("%d",&count); printf(" :"); scanf("%d",&num); head = insert(head,num,count); print(head); } return 0; } // struct node *creat(struct node *head) { struct node *p1,*p2; //3. malloc p1 = p2 = (struct node *)malloc(sizeof(struct node)); // printf(" 0 , 0 , :p1_addr = %d
"
,p1); scanf("%d",&p1->num); p1->next = NULL; while(p1->num > 0) { if(head == NULL) head = p1; else p2->next = p1; p2 = p1; p1 = (struct node *)malloc(sizeof(struct node)); p1->next = NULL;// n++; printf(" 0 , 0 , :p%d_addr = %d
"
,n,p1); scanf("%d",&p1->num); } free(p1); p1 = NULL; p2->next = NULL; printf("
"
); return head; } // void print(struct node *head) { struct node *tmp; tmp = head; printf(" !!!
"
); printf(" :%d
"
,n); while(tmp != NULL) { printf(" :num = %d, :addr = %d
"
,tmp->num,tmp); tmp = tmp->next; } printf(" !!!
"
); } // struct node *del(struct node *head,int num) { struct node *p1,*p2; if(head == NULL) { printf(" !!!
"
); return head; } p1 = head; // while((num != p1->num) && (p1->next != NULL)) { p2 = p1; // p1 p2 p1 = p1->next; //p1 } if(p1->num == num) // { if(p1 == head) // p1 head = p1->next; else { p2->next = p1->next; // p1 free(p1); } n--; // 1 } else // { printf(" %d
"
,num); } return head; } // struct node *insert(struct node *head,int num,int count) { struct node *p0,*p1,*p2; p1 = (struct node *)malloc(sizeof(struct node)); p1->num = num; p1->next = NULL; p0 = head; p2 = p0->next; // if(count == n + 1) // { while(p0->next != NULL) // { p0 = p0->next; } p0->next = p1; } else if(count == 1) // { p1->next = head; head = p1; } else { for(;count > 2;count--) { p0 = p0->next; p2 = p0->next; } p1->next = p0->next; p0->next = p1; } n++; return head; }

운행 결 과 는 여기에 스티커 를 붙 이지 않 습 니 다. 참고 하 시기 바 랍 니 다. 만약 거기에 잘못 이 있 으 면 가르침 을 바 랍 니 다.

좋은 웹페이지 즐겨찾기