flushall(); f=getchar(); if(f=='C')
{if(k==0)l1=initlist_hc(); else {l2=initlist_hc();} k++;}
else if(f=='N')
{if(k==1)cshlist_hc(l1);else cshlist_hc(l2);} else if(f=='I')
{if(k==1)listinsert_hc(l1);else listinsert_hc(l2);} else if(f=='D')
{if(k==1)listdelete_hc(l1);else listdelete_hc(l2);} else if(f=='H') {l3=initlist_hc(); listhb_hc(l1,l2,l3);} }while(f!='E'); }
struct sqlist *initlist_hc() {struct sqlist *l;
l=(struct sqlist*)malloc(sizeof(struct sqlist)); if(!l)printf(\出错!\\n\return(l);}
void cshlist_hc(struct sqlist *l) {struct stu *newbase;
void printlist_hc(struct sqlist *l); char x[6],y[3];int z;
l->elem=(struct stu*)malloc(LIST_INIT_SIZE*sizeof(struct stu)); if(!l->elem)printf(\出错!\\n\l->length=0;
l->listsize=LIST_INIT_SIZE;
printf(\请输入信息以-1结束:\\n\scanf(\while(z!=-1)
{if(l->length==l->listsize)
{newbase=(struct stu*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(struct stu)); if(!newbase)printf(\出错!\\n\
l->elem=newbase;l->listsize+=LISTINCREMENT;} strcpy(l->elem[l->length].name,x); strcpy(l->elem[l->length].num,y); l->elem[l->length].cj=z; scanf(\if(z!=-1)l->length++;} printlist_hc(l);}
void listinsert_hc(struct sqlist *l) {int i,j;
struct stu *newbase;
void printlist_hc(struct sqlist *l); if(l->length==l->listsize)
{newbase=(struct stu*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(struct stu)); if(!newbase)printf(\出错!\\n\
l->elem=newbase;l->listsize+=LISTINCREMENT;} printf(\输入要插入信息的位置:\scanf(\for(i=l->length;i>=j;i--)
{strcpy(l->elem[i+1].name,l->elem[i].name); strcpy(l->elem[i+1].num,l->elem[i].num); l->elem[i+1].cj=l->elem[i].cj;} printf(\输入插入信息:\\n\
scanf(\l->length++; printlist_hc(l);}
void listdelete_hc(struct sqlist *l) {void printlist_hc(struct sqlist *l); int i,j;
printf(\输入删除信息的位置:\scanf(\
printf(\删除的信息为:%s,%s,%d\\n\for(i=j+1;i<=l->length;i++)
{strcpy(l->elem[i-1].name,l->elem[i].name); strcpy(l->elem[i-1].num,l->elem[i].num); l->elem[i-1].cj=l->elem[i].cj;} l->length--; printlist_hc(l);}
void listhb_hc(struct sqlist *l1,struct sqlist *l2,struct sqlist *l3) {void printlist_hc(struct sqlist *l); struct stu *p1,*p2,*p3;
struct stu *p1_last,*p2_last; p1=l1->elem;p2=l2->elem;
l3->length=l1->length+l2->length+1; l3->listsize=l1->length+l2->length+2;
p3=l3->elem=(struct stu*)malloc(l3->listsize*sizeof(struct stu)); if(!l3->elem)printf(\出错!\\n\p1_last=l1->elem+l1->length; p2_last=l2->elem+l2->length;
while(p1<=p1_last&&p2<=p2_last) {if(p1->cj>p2->cj)
{strcpy(p3->name,p1->name); strcpy(p3->num,p1->num); p3->cj=p1->cj;p1++;p3++;} else
{strcpy(p3->name,p2->name); strcpy(p3->num,p2->num); p3->cj=p2->cj;p2++;p3++;} }
while(p1<=p1_last)
{strcpy(p3->name,p1->name); strcpy(p3->num,p1->num); p3->cj=p1->cj;p1++;p3++;} while(p2<=p2_last)
{strcpy(p3->name,p2->name); strcpy(p3->num,p2->num); p3->cj=p2->cj;p2++;p3++;} printlist_hc(l3);}
void printlist_hc(struct sqlist *l) {int i;
printf(\当前表中信息如下:\\n\for(i=0;i<=l->length;i++)
{printf(\
实验三 单链表的基本操作
实验预备知识:
1.熟练运用指针进行程序设计,掌握结构体指针。 2.掌握使用结构体指针访问结构体变量。 3.掌握指针作为函数的参数使用。
4.理解单链表的含义、目的和处理方法。
一、实验目的
1.掌握线性表的链式存贮结构及基本操作,深入了解链表的基本特性,以便在实际问题背景下灵活运用它们。
2.巩固该存贮结构的构造方法,深入理解和灵活掌握链表的插入、删除等操作。
二、实验环境
⒈ 硬件:每个学生需配备计算机一台。操作系统:DOS或Windows;
⒉ 软件:DOS或Windows操作系统+Turbo C;
三、实验要求
1.定义一链表类型,并定义带有头结点的单链表。
2.将教材中链表的建立、初始化、插入、删除等函数实现。
3.链表能够存储10名学生的基本信息(包括姓名、学号和成绩)。 4.由主函数按照用户要求对各个链表操作访问。
5.每次操作之前要有明确的说明,操作后要输出操作结果。 6.分析顺序表链表的插入、删除、查找的时间和空间复杂度。
四、实验内容
1.在自己的U盘的“姓名+学号”文件夹中创建“实验3”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。
2.完成链表操作的如下函数:建立,初始化,增加,插入,删除。 //链表插入、删除、合并 #include \#include\#include\
#define LEN sizeof(struct lnode_hc) #define LEN1 sizeof(struct hc_stu)
struct hc_stu {char name[3]; char num[3]; int cj; };
struct lnode_hc
{struct hc_stu *data; struct lnode_hc *next; };
void main()
{struct lnode_hc *jll();
void cshl(struct lnode_hc *head); void crl(struct lnode_hc *head); void scl(struct lnode_hc *head);
void hbl(struct lnode_hc *h1,struct lnode_hc *h2,struct lnode_hc *h3); struct lnode_hc *h1,*h2,*h3; char f;int i, k=0;
printf(\请选择对链表的操作,操作菜单如下:\\n\for(i=0;i<80;i++)printf(\printf(\建立链表(C)\\n\
printf(\初始化链表(N)\\n\printf(\链表中插入元素(I)\\n\printf(\链表中删除元素(D)\\n\printf(\合并链表(H)\\n\printf(\退出系统(E)\\n\for(i=0;i<80;i++)printf(\do
{printf(\输入大写字母按Enter确定:\flushall(); f=getchar(); if(f=='C')
{if(k==0)h1=jll(); else h2=jll(); k++;}
else if(f=='N')
{if(k==1)cshl(h1);else cshl(h2);} else if(f=='I')
{if(k==1)crl(h1);else crl(h2);} else if(f=='D')
{if(k==1)scl(h1);else scl(h2);} else if(f=='H') {h3=jll();
hbl(h1,h2,h3);} }while(f!='E'); }
struct lnode_hc *jll() {struct lnode_hc *head;
head=(struct lnode_hc*)malloc(LEN); if(!head)printf(\出错!\\n\head->next=NULL; return (head);}
void cshl(struct lnode_hc *head) {void printl(struct lnode_hc *head); char x[3],y[3];int z;
struct lnode_hc *p1=head,*p2; printf(\请输入信息以-1结束:\\n\scanf(\while(z!=-1)
{p2=(struct lnode_hc*)malloc(LEN); if(!p2)printf(\出错!\\n\
p2->data=(struct hc_stu*)malloc(LEN1); if(!p2->data)printf(\出错!\\n\