단일 체인 시트 의 생 성, 증가, 삭제, 삭제 작업

8486 단어 데이터 구조
C 언어 로 단일 체인 시트 의 몇 가지 기본 동작 을 실현 합 니 다. 생 성 (처음부터 만 들 고 끝 에서 만 들 기), 증가, 삭제, 비우 기 작업:
#include
#include

typedef struct Node
{
    int data;
    struct Node *next;
}Node;

Node *CreatebyTail();//    ,       
Node *CreatebyHead();//    ,       
void Print(Node *head);//    
Node *Insert(Node *head,int num);//       num  
Node *Delete(Node *head,int num);//      num  
void Clear(Node *head);//    

int main()
{
    Node *head;
    int m,n;
    head=CreatebyTail();
    //head=CreatebyHead();
    Print(head);
    printf("       :
"
); scanf("%d",&n); head=Insert(head,n); printf(" ,"); Print(head); printf(" :
"
); scanf("%d",&m); head=Delete(head,m); printf(" ,"); Print(head); Clear(head); return 0; } Node *CreatebyTail()// , { Node *head,*tail,*p; int num; head=tail=NULL; printf(" -10000 :
"
); scanf("%d",&num); while(num!=-10000) { p=(Node*)malloc(sizeof(Node)); p->data = num; p->next = NULL; if(head==NULL)// { head=p; } else// { tail->next=p; } tail=p; scanf("%d" , &num); } return head; } Node *CreatebyHead()// , { Node *head,*p; int num; head=(Node*)malloc(sizeof(Node)); head->next=NULL; printf(" -10000 :
"
); scanf("%d",&num); while(num!=-10000) { p=(Node*)malloc(sizeof(Node)); p->data=num; p->next=head->next; head->next=p; scanf("%d",&num); } return head; } void Print(Node *head)// { Node *p; p=head;// //p=head->next;// if(head==NULL) { printf(" !
"
); } else { printf(" :
"
); while(p != NULL) { printf("%4d",p->data);// 4 , p=p->next; } } printf("
"
); } Node *Delete(Node *head,int num)// num { Node *p1,*p2; if(head==NULL) { printf(" !
"
); return head; } p1=head; while( p1->next && p1->data != num )// p1 , num { p2=p1;//p2 p1 p1=p1->next; } if( p1->data == num )// p1 num { if( head == p1 )// p1 { head=p1->next; } else { p2->next=p1->next; } free(p1); printf(" !
"
); } else { printf(" !
"
); } return head; } Node *Insert(Node *head,int num)// num { Node *p,*p1,*p2; p=(Node*)malloc(sizeof(Node)); p->data=num; p->next=NULL; p1=head; while(p1)//p1 { p2=p1; p1=p1->next; } if(p1 == head) { head=p; } else { p2->next=p; } p->next=p1; printf(" !
"
); return head; } void Clear(Node *head)// { Node *p=head; while(head) { p=head->next; free(head); head=p; } printf(" !
"
); }

좋은 웹페이지 즐겨찾기