シングルチェーン表の各インターフェースの実現

4811 ワード

シングルチェーン表の方向が逆転しないように注意してください.CRT_SECURE_NOの_WARNINGS 1菗define_CRT_SECURE_NOの_WARNINGS 1墯ifndef Seqlist_H萼デfine Seqlist_H
璣include菷菷include菵菷include
typedef int SLDataType;typedef struct SlistNode{SLDataType}struct SlistNode*_next;SlistNode;typedef struct Slist{SlistNode*'}Slist;
void SlistInit(Slist*plist)void SlistPrint(Slist*plist)SlistNode*BuySlistNode(SLDataType x)void SlistPush Front(Slist*plist、SLDataType x);void SlistPush Back(Slist*plist、SLDataType x);void SlistPopBack(Slist*plist)void SlistPopFront(Slist*plist);SlistNode*SlistFind(Slist*plist、SLDataType x)void SlistInsertAfter(SlistNode*pos、SLDataType x)void SlistEase After(SlistNode*pos);void SlistRemove(Slist*plist、SLDataType x)typedef int SLDataType;void test()void SlistDesory(Slist*plist)void removeElements(SlistNode*_head,int val);SlistNode*reverseList(SlistNode*_head)SlistNode*middleNode;SlistNode*FindKthToTil(SlistNode*_head、unsigned int k)SlistNode*merge Twolists(SlistNode*l 1,SlistNode*l 2)
ヽoo.ツ.........................................................各インターフェースの実現に向けて、「Sqlist. h」void SlistInit(Slist*plist){asert(plist);plist->"""""""""(((")void SlistPrint(Slist*plist)"{asert(plist);SlistNode============"""""""""""((((((((((((((""""))))))""""""""""""""""""""""""""""""""""""""""""""""""""""""""printf("NULL")/""SlistNode*BuySlistNode(SLDataType x){SlistNode*newNode=(SlistNode*)mallec(size of(SlistNode);newNode->[u data=x;newNode->_next=NULL;//NULLポインタはメモリが0のアドレスreturnnewNode;void SlistPusshFront(Slist*plist、SLDataTyypex)を指します.//newheadの針は元のヘッドplist->_head=newheadを指します./元のヘッドはnewheadを指します.SlistushBack(Slist*plist、SLDataType x){asert(plist);SlistNode*cur=plist->_head;if(plist==NULL){plist->(head=Buhead=Buhead=BuySlistNode(x)=========Buuhead==Buhead==Buhead===Buhead====Buuhead====Buhead SlistststNode de de Node de Node de de de de de de de de de(x)(x)eeexxxxxe e e e e e e e e e e e e e e e r->_next=newNode;}void SlistPopFront(Slist*plist){astert(plist)SlistNode*next=plist->_head->_next;free(plist->_head);next=plist->>_head;void SlistPopBack(Slist*plist){asert(plist);SlistNode*cur=plist=plist===================================================================================================ist->_head=NULL;else{while(cur->_next)prev=cur;/prevは、curの前の位置のノードを保存するために使用されています.保存しないと、/直接freeが最後のノードになってしまうと、最後から数えて2番目のノードが野ポインタcur=cur->(u next;)free(cur);prev->>unext=NULL;while(cur-cur======NUCcul;while(cur=======(cur===necur==necur==necut""""""""""""""""""""""""""""""""""""""""""""""Node*SlistFind(Slist*plist、SLDataType x){astert(plist);SlistNode*cur=plist->_head;while(cur){if(cur->{rudata==x){returncur cur==}cur=cur=>next;;;return-turn-'''''''''''''''''''''''''''''''';retututututututututututututututututututututurnsssssft;;;;;;;;;;;;;;;;;;retutututututututututututurnySlistNode(x);SlistNode*next=pos->_next;pos->_next=newNode;newNode->_next=next;void SlistElistErrase After(SlistNode*pos){asasert(pos);SlistNode*next=pos->'''''''''next;free(next);next=next;free(next);next=next;free(next);next=next;next=next;next;next;next;next;next;next;next;next;next;next;frerererererereree(next;next;next;next;next;next;next>_head;SlistNode*cur=prev->_next;while(cur){if(cur->_data==x){prev->_next=cur->_next;free(cur);cur=prev->_next;else{prev=cur;cur=cur=cur->_next;}iif(plist->{plist->head========x){plist-''''head=========================================================================================->_head;while(cur){SlistNode*next=cur->_next;free(cur);cur=next;}plist->_head=NULL;
void test(&list、1);Slist*list(&list)、SlistInit(&list、3);SlistPush Front(&list、5);SlistPush Front(&list、2);SlistPush Front(&list、3);Slist PusshFront(&list、5);Slist&list;
SlistPushBack(&list, 5);
SlistPushBack(&list, 6);
SlistPrint(&list);

SlistFind(&list, 7);
SlistNode* pos = SlistFind(&list, 3);
SlistInsertAfter(pos,7);
SlistPrint(&list);
SlistEraseAfter(1);
SlistPrint(&list);
SlistDesory(&list);
)