资源描述:
《单链表的插入和删除实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验一、单链表的插入和删除一、目的了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的棊本算法及相关的时间性能分析。二、要求:建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。三、程序源代码#includc〃stdio.h"#include/string.h〃#includez/stdlib.h〃typedefListNode*LinkList;//自定义LinkList单链表类型#include〃ctype・h〃typedefstruc
2、tnode{chardata[10];structnode*next:}ListNode;//定义结点//结点的数据域为字符串//结点的指针域LinkListCrcatListRl();//函数,用尾插入法建立带头结点的单链表//函数,按值查找结点//函数,删除指定值的结点//函数,打印链表中的所右值//函数,删除所有结点,释放内存ListNode^LocateNode();voidDeleteList();voidprintlist();voidDeleteAll();//=====主函数二==vo
3、idmain()charch[10],num[10LinkListhead;head=CreatListRl()://用尾插入法建立单链表,返回头指针printlist(head);//遍历链表输出其值printf(z/Deletenode(y/n):〃);//输入"y”或"n”去选择是否删除结点scanf(〃%s〃,num);if(strcmp(num,〃y")=0
4、strcmp(num,〃Y〃)==0){printf("'PleaseinputDelete_data:z,);scanf(〃%s〃,
5、ch);//输入要删除的字符串DeleteList(head,ch);printlist(head);DeleteAll(head);//删除所有结点,释放内存I=====用尾插入法建立带头结点的单链表二===二二二二LinkListCreatListRl(void){charch[10];LinkListhead二(LinkList)mal1oc(sizeof(ListNode));//生成头结点ListNode*s,*r,*pp;t二head;r->next=NULL;printf("'Input
6、#toend”);//输入代表输入结朿printf(''PleaseinputNode_data:z,);scanf(〃%s〃,ch);//输入各结点的字符串while(strcmp(ch,〃#〃)!=0){pp=LocateNode(head,ch);//按值查找结点,返冋结点指针if(pp=NULL){//没有重复的字符串,插入到链表中s二(ListNode*)malloc(sizeof(ListNode));strcpy(s~>data,ch);r->next=s;r=s;r—>next二NUL
7、L;printf("Input#toend“);printf(z,PleaseinputNode_data:,z);seanf(〃%s〃,ch);}returnhead;//返冋头指针}//==========按值查找结点,找到则返回该结点的位置,否则返回NULL二二二二二二二二二二ListNode^LocateNode(LinkListhead,char*key){ListNode*p=head->next;//从开始结点比较while(p&&strcmp(p->data,key)!=0)//直到p
8、为NULL或p->data为key止p=p->next;//扫描下一个结点returnp;//若p二NULL则查找失败,否则p指向找到的值key的结点}I=====删除带头结点的单链表中的指定结点=voidDeleteList(LinkListhead,char*key){ListNode*p,*r,*q二head;p=LocateNode(head,key);//按key值查找结点的if(p==NULL){//若没有找到结点,退出printf(''positionerror,z);exit(0);}
9、while(q->next!=p)//p为要删除的结点,q为P的前结点q=q->next;r二q-〉next;q->next=r-〉next;free(r);//释放结点}//==========打印链表=======voidprintlist(LinkListhead){ListNode*p=head->next;//从开始结点打印while(p){printf(z,%s,"、p->data);p=p->next;}printf(〃〃);}I]==