データ構造ーシングルチェーンテーブルの基本操作(ソースコード)


#include 
#include  

typedef int Elemtype;
typedef struct Node{
	Elemtype data;
	struct Node *next;
}Node,*LinkList;
/*            ,                        ,       */
/*  :       malloc  ,             。           ,           ,               ,         ,          。           ,            ,        ,            ,   malloc        。*/
//      
void create_ListHead(LinkList *pHead)	//            	              
{
	*pHead=(LinkList)malloc(sizeof(Node));
	if(NULL!=pHead)
		(*pHead)->next=NULL;
	else
		printf("      
"); } // LinkList get_newNode(Elemtype e) { LinkList newNode=(LinkList)malloc(sizeof(Node)); if(NULL!=newNode) { newNode->data=e; newNode->next=NULL; return newNode; } else { printf("
"); return 0; } } // void push_Front(LinkList *L,Elemtype e) { LinkList p; p=get_newNode(e); p->next=(*L)->next; (*L)->next=p; } // void push_Back(LinkList *L,Elemtype e) { LinkList tail; tail=*L; while(NULL!=tail->next) // tail tail=tail->next; tail->next=get_newNode(e); } // void pop_Front(LinkList *L) { LinkList p; p=(*L)->next; if(p!=NULL) { (*L)->next=p->next; free(p); p=NULL; // , printf("OK
"); } } // void pop_Back(LinkList *L) { LinkList p,q; p=*L; while(p->next!=NULL) { q=p; p=p->next; } free(p); p=NULL; q->next=NULL; printf("OK
"); } // void delete_List(LinkList *L,Elemtype key) { LinkList p,q; for(p=*L;NULL!=p->next;p=p->next) { if(p->next->data==key) { q=p->next; // , p->next=q->next; free(q); q=NULL; printf("
"); return; } } printf("
"); } // void print_List(LinkList *L) { LinkList p; p=(*L)->next; if(p==NULL) printf("NULL
"); else { while(NULL!=p) { printf("%d ",p->data); p=p->next; } printf("
"); } } // int length_List(LinkList *L) { LinkList p=(*L)->next; int length=0; while(NULL!=p) { length++; p=p->next; } return length; } // int search_List(LinkList *L,Elemtype e) { LinkList p=(*L)->next; int i=1; while(NULL!=p) { if(p->data==e) return i; else p=p->next; i++; } printf("
"); return 0; } // ( ) void destory_List(LinkList *L) { LinkList p,q; p=(*L)->next; while(p!=NULL) { q=p->next; free(p); p=q; } (*L)->next=NULL; printf("OK
"); } //   void invert(LinkList L)   {       LinkList p,q;       p=L->next;       L->next=NULL;       while(p)       {              q=p->next;                     p->next=L->next;           L->next=p;         p=q;       }   }     int main() { LinkList L;int e,i,temp; while((i=getchar())!='#') // # { switch(i) { case '1':create_ListHead(&L);break; case '2':printf("
"); scanf("%d",&e); push_Back(&L,e); break; case '3':printf("
"); scanf("%d",&e); push_Front(&L,e); break; case '4':pop_Front(&L);break; case '5':pop_Back(&L);break; case '6':print_List(&L);break; case '7':printf("
"); scanf("%d",&e); delete_List(&L,e); break; case '8':printf(" %d
",length_List(&L));break; case '9':printf("
"); scanf("%d",&e); temp=search_List(&L,e); if(temp!=0) printf("%d %d
",e,temp); break; case '0':destory_List(&L);break;                         case 'a':invert(L);break;                 } } destory_List(&L); free(L); L=NULL; return 0; }