发牌程序的编写

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)); //输出长度

相关文档
最新文档