发牌程序的编写
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三、单链表的实现
一、实验目的
1.了解顺序单链表的逻辑结构和基本操作
2.实现顺序单链表的逻辑结构和基本操作
二、实验工具
VC6.0
三、实验练习
1、新建EX+学号.cpp,阅读并运行下面的代码程序,给出运行结果,可以修改其中的程序显示,要求每个人的结果保证唯一。
#include
#include
typedef int elemtype;//可以根据需要定义所需数据类型
typedef struct node{
elemtype data;//数据域
struct node *next;//指针域
}slink;
/*建立一个单链表(创建一个含有n个元素的带头结点的单链表head)*/ slink *creslink(int n){
slink *head,*p,*s;//p用于指向新结点,s用于指向新开辟结点
int i;
p=head=(slink *)malloc(sizeof(slink));//创建头结点
for(i=1;i<=n;i++){
s=(slink *)malloc(sizeof(slink));//s指向新开辟结点
scanf("%d",&s->data); //新节点数据域赋值
p->next=s; //将新结点连接到p所指结点的后面
p=s; //p指向新链入结点
}
p->next=NULL; //尾结点的指针域为空
return head; //返回头指针
}
//求表长操作(返回单链表head的长度
int getlen(slink *head){
slink *p;
int n; //n用来计数
p=head->next;
n=0;
while(p!=NULL){
n++;
p=p->next;
}
return n;
}
//取元素操作(取出单链表head的第i个元素的值)
int getelem(slink *head,int i,elemtype *e){
slink *p;int j;
if(i<1)return 0; //参数i不合理,去元素失败,返回0
p=head->next;
j=1;
while(p!=NULL&&jnext;
j++;
}
if(p==NULL)return 0; //i值超过链表的长度,取元素失败,返回0
*e=p->data;
return 1; //取元素成功,返回1
}
int locate(slink *head,elemtype x){ //返回位序
int i=1;
slink *p=head->next;
while(p!=NULL&&p->data!=x){ //从第一个结点开始查找数据域值为x的结点
p=p->next;
i++;
}
if(p)return i; //找到,返回位序
else return 0; //没找到,返回0
}
//删除操作(删除带头结点单链表head的第i个结点
int delet(slink *head,int i,elemtype *e){
slink *p,*q;
int j;
if(i<1)return 0; //参数i不合理,返回0
p=head;j=0;
while(p->next!=NULL&&j p=p->next; //从第一个结点开始查找第i-1个结点,由p指向它 j++; } if(p->next==NULL) return 0; //i值超过链表的长度,返回0 q=p->next; //q指向第i个结点 p->next=q->next; //p的指针域指向q指向结点的下一个结点,删除第i个结点 *e=q->data; //保存结点数据域值 free(q); //释放第i个结点占用的空间 return 1; //删除成功,返回1 } //插入操作(在带头结点的单链表head的第i个结点之前插入一个值为x的新结点) int insert(slink *head,int i,elemtype x){ slink *p,*q; int j; if(i<1)return 0; //参数i不合理,返回0 p=head;j=0; while(p!=NULL&&j p=p->next; //从第一个结点开始查找第i-1个结点,由p指向它 j++; } if(p==NULL) return 0; //i值超过链表的长度+1,返回0 q=(slink *)malloc(sizeof(slink)); q->data=x; //创建值为x的结点q q->next=p->next; //将q指向结点插入到p指向结点之后 p->next=q; return 1; //插入成功,返回1 } //输出操作(输出带头结点的单链表head中的所3有结点值 void list(slink *head){ slink *p; p=head->next; while(p!=NULL){ printf("%3d",p->data); p=p->next; } printf("\n"); } int main(int argc, char *argv[]) { slink *h; int n,i; elemtype x; printf("input the number of data:"); scanf("%d",&n); printf("input %d data:",n); h=creslink(n); //创建含有n个元素的带头结点的单链表 list(h); //输出单链表 printf("length=%d\n",getlen(h)); //输出长度