データ構造C言語版--単一チェーンテーブルの基本機能を実現

13860 ワード

/*
*             (   9999 ,      ),        
*             。
* :new delete C++    
    malloc free C++/C       
*/ 
#include
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
//         
struct LinkNode{
    int data;                   //       
    struct LinkNode *next;      //       
}; 

//1.    ,     ,          
void print(LinkNode *L){
    LinkNode *p;        //        p 
    p = L->next;        // p    L       
    while(p != 0){
        printf("%d、",p->data);
        p = p->next;    //     
    }
    printf("
"
); // } //2. int Length_LinkList(LinkNode *L){ LinkNode *p; // int len = 0; // , p = L->next; // P while(p != NULL){ len++ ; p = p->next; // , } return len; // } //3. , i , i LinkNode* FindI_LinkNode(LinkNode *L,int i){ LinkNode *p; // int j = 1; // p = L->next; // p while(j < i){ // i p = p->next; // j++; // } return p; } //4. , e, e int FindE_LinkNode(LinkNode* L,int e){ LinkNode *p; int count=0; p=L->next; while(p != NULL) { count++; if(p->data==e) return (count); p=p->next; } return 0; } //5. int Insert_head(LinkNode* &L,int x){ // H LinkNode *t; // t = new LinkNode; // t->data = x; // t->next = L->next; // , null L->next = t; // next , return OK; } //6. int Insert_end(LinkNode *L,int x){ LinkNode *t; t = new LinkNode; // t->data = x; // while(L->next != NULL){// , , L = L->next; // } // L->next = t; // t->next = NULL; // return OK; } //7. i int Insert_LinkNode(LinkNode *L,int i,int x){ if(i < 1 || i > Length_LinkList(L)){ printf(" !
"
); return ERROR; } LinkNode *p; if(i == 1) p = L; // P else p = FindI_LinkNode(L,i-1); // P i-1 Insert_head(p,x); // x p return OK; } //8. int Del_Head(LinkNode *L){ if(L->next != NULL){ LinkNode *p; // p = L->next; // p ,p->next L->next = p->next; // delete p; // , }else{ printf(" !
"
); return FALSE; } } //9. int Del_End(LinkNode *L){ if(L->next != NULL){ LinkNode *p; LinkNode *q; int i; p = L->next; // p for(i = 1;i < Length_LinkList(L) - 1;i++){ p = p->next; } q = p->next; p->next = NULL; //free(q); delete q; }else{ printf(" !"); } } //10. int Del_i(LinkNode* L,int i){ if(i<1 || i>Length_LinkList(L))// { printf(" !"); return 0; } LinkNode *p; if(i==1) p=L; // p else p=FindI_LinkNode(L,i-1); // p i-1 Del_Head(p); // p return OK; } /* * , , */ int main(){ int i,x,count,m; LinkNode *H; // LinkNode *add; H = new LinkNode; // //H->data = -1; // H->next = NULL; // printf(" :
"
); while(1){ scanf("%d",&i); if(i == 9999){ break; }else{ Insert_end(H,i); // } } printf("The LinkNode elem is:"); print(H); // printf("1. :"); scanf("%d",&i); Insert_head(H,i); printf("The LinkNode elem is:"); print(H); printf("2. :"); scanf("%d",&i); Insert_end(H,i); printf("The LinkNode elem is:"); print(H); printf("3. 、 ( ):
"
);// scanf("%d %d",&i,&x); Insert_LinkNode(H,i,x); printf("The LinkNode elem is:"); print(H); printf("4. :"); scanf("%d",&i); if(i < 1 || i > Length_LinkList(H)){ // , error printf(" !
"
); }else{ add = FindI_LinkNode(H,i); int e = add->data; printf(" :%d :%d
"
,i,e); } printf("4. :
"
); scanf("%d",&i); m = FindE_LinkNode(H,i); if(m == 0){ printf(" !
"
); }else{ printf(" :%d :%d
"
,i,m); } Del_Head(H); printf("5. :
The LinkNode elem is:"
); print(H); Del_End(H); printf("6. :
The LinkNode elem is:"
); print(H); printf("7. :
"
); scanf("%d",&i); if(i < 1 || i > Length_LinkList(H)){ // , error printf(" !
"
); }else{ Del_i(H,i); printf("6. :
The LinkNode elem is:"
); print(H); } count = Length_LinkList(H); printf("8. :%d
"
,count); return 0; }

転載先:https://www.cnblogs.com/tengpengfei/p/10454032.html