#include <iostream.h> #include <malloc.h> #include <iostream.h> #include <stdlib.h> typedef int elemtype; typedef struct linknode { elemtype data; struct linknode *next; }nodetype; //---------------create a link list?NO, create a node -------------------- nodetype *create() { elemtype d; nodetype *h=NULL,*s,*t; int i=1; cout<<"创建一个单链表:(节点值为int型)"<<endl; while(1) { cout<<"输入第"<<i<<"个节点值:"<<endl; cin>>d; if(d==0) break; if(i==1) { h=(nodetype *)malloc(sizeof(nodetype)); h->data=d; h->next=NULL; t=h; } else { s=(nodetype *)malloc(sizeof(nodetype)); s->data=d; s->next=NULL; t->next=s; t=s; } i++; } return h; } //---------------create a link list --------------------- //------------display all data in the link list ---------- void disp(nodetype *h) { nodetype *p=h; if(p==NULL) cout<<"null"<<endl; while(p!=NULL) { cout<<p->data<<endl; p=p->next; } cout<<endl; } //------------ display all data in the link list ---------- //------------ get the length of the link list ----------- int len(nodetype *h) { int i=0; nodetype *p=h; while(p!=NULL) { p=p->next; i++; } return i; } //-------------search the element in the i position---------- nodetype *find(nodetype *h,int i) { nodetype *p=h; int j=1; if(i>len(h)||i<0) return NULL;//Maybe, you should give user explanation //===== Add code by jiangtao ============================ //cout<<"Maybe, your number overpassed the extent"; //return NULL; //===== Add code by jiangtao ============================ else { while(p!=NULL&&j<i) { j++; p=p->next; } return p; } } //-------------search the element in the i position---------- //-------------insert element into the i position ----------- nodetype *ins(nodetype *h,int i,elemtype x) { nodetype *p,*s; s=(nodetype *)malloc(sizeof(nodetype)); s->data=x; s->next=NULL; if(i==0) { s->next=h; h=s; } else { p=find(h,i); //add by jiangtao //============when the i equal the (length+1), //namely insert the element into the last position======== //add by jiangtao if(p!=NULL) { s->next=p->next; p->next=s; } else cout<<"error in i"<<endl; } return h; } //-------------insert element into the i position ----------- //-------------delete the ith data -------------------------- nodetype *del(nodetype *h,int i) { nodetype *p=h,*s; int j=1;//================j for what?============================= //add code by jiangtao if(i>len(h)||i<=0) { cout<< return h; } //add code by jiangtao if(i==1) { h=h->next;free(p); } else { p=find(h,i-1); //====================questions ========== //你的下标 i 是从0开始计数,而你的位置从 1 开始计数。在链表中,当下边删除时应该用i-2的next指针跳过i-1,并指向i的位置 //====================questions ========== if(p!=NULL&&p->next!=NULL) { s=p->next; p->next=s->next; free(s); } else cout<<"the value of i is error"<<endl; } return h; } //-------------delete the ith data -------------------------- //========what is notation =========== void dispose(nodetype *h) { nodetype *pa=h,*pb; if(pa!=NULL) { pb=pa->next; if(pb==NULL) free(pa); else { while(pb!=NULL) { free(pa); pa=pb; pb=pb->next; } free(pa); } } } //=============notation===================================== //注释 -1分 //类的模式 +1 分