当前位置:文档之家› 实验一 线性表基本操作

实验一 线性表基本操作

if( s == NULL)
{
printf("申请空间失败");
return ERORR;
}
s->number=i;
printf("请输入第%d个人的密码:",i);
scanf("%d",&s->password);
t->next=s;
t=s;
}
t->next=NULL;
return (OK);
}
int Josephus(LinkList H,int m)
p1=InsList(p,e);
show(p1);
}
运行结果:
分析:该程序一共有三个子函数:InitList(int r)初始化顺序表、InsList (SeqList *L,ElemType e)插入元素、show(SeqList *L)显示顺序表。主函数先得到数序表的长度r,把r传给初始化函数,经输入和排序得到一个顺序表,返回表的收地址L。输入一个待插入数e,再调用插入函数把它插入到该顺序表中(先用for循环通过比较找到该插入的位置,在用for循环把后面的元素都向后移一位,再把e插入,最后last++),返回首地址L。最后在调用显示函数,输出插入后的顺序表
printf("请输入从哪开始删除:");
scanf("%d",&i);
printf("请输入删除的位数:");
scanf("%d",&k);
p1= DelList(p,i,a,k);
show(p1);
}
运行结果:
分析:该函数有三个子函数:InitList(int r)初始化顺序表、DelList (SeqList *L,int i,ElemType a[],int k)删除元素、show(SeqList *L)显示顺序表。主函数先得到数序表的长度r,把r传给初始化函数,经输入和排序得到一个顺序表,返回表的收地址L。输入要删除的首位置i和删除的位数k,再调用删除函数把该顺序表中的相应元素删掉(先用for循环删除这k个元素,在用for循环把后面的元素向前移,最后last-k),返回首地址L。最后在调用显示函数,输出插入后的顺序表
l->elem[j+1]=temp;
}
}
}return(l);
}
SeqList * DelList(SeqList *l,int i,ElemType a[],int k)//删除
{
int j,p;
if((i<1)||(i>l->last+1))
{
printf("删除位置不合法");
return (ERROR);
p=head=(link*)malloc(sizeof(link));
for(i=1;i<=n;i++)
{
printf("输入第%d个数据",i);
s=(link*)malloc(sizeof(link));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=NULL;
{
ElemType1 number;
ElemType2 password;
struct Node* next;
}Node,*LinkList;
int InitList(LinkList H,int n)
{
Node *s,*t;
int i;
t=H;
for(i=1;i<=n;i++)
{
s=(Node *)malloc(sizeof(Node));
6.将运行结果截图,并粘在文档的相应位置。
三、实验环境
1.turboc2,win-tc,VC++
四、实验内容和步骤
1.编程实现在顺序存储的有序表中插入一个元素。
2.编程实现把顺序表中从i个元素开始的k个元素删除。
3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an)变成(an,…..a2,a1)。
4.约瑟夫环问题。
约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。试设计一个程序,求出出列顺序。
#define OK 1
#define ERROR 0
#define ElemType int
#define MAXSIZE 100
typedef struct//顺序表申明
{
ElemType elem[MAXSIZE];
int last;
}SeqList;
SeqList * InitList(int r)//初始化顺序表输入顺序表的元素
}
SeqList * InsList (SeqList *L,ElemType e)//插入元素
{
int K,i,j;
if(L->last>=MAXSIZE-1)
{
printf("表已满无法插入");
return(ERROR);
}
for(K=0;K<L->last;K++)
{
if(e<=L->elem[K])
实验一 线性表
(4课时)
一、实验目的
掌握线性表的顺序表和链表的基本操作:建立、插入、删除、查找、合并、打印等运算。
二、实验要求
1.格式正确,语句采用缩进格式;
2.设计子函数实现题目要求的功能;
3.编译、连接通过,熟练使用命令键;
4.运行结果正确,输入输出有提示,格式美观。
5.输入数据至少三组,分别代表不同的情况,以测试程序的正确性。
}
for(i=0;i<l->last;i++)//排序
{
for(j=0;j<l->last-i;j++)
{
if(l->elem[j]>l->elem[j+1])
{
temp=l->elem[j];
l->elem[j]=l->elem[j+1];
l->elem[j+1]=temp;
}
}
}return(l);
}
for(j=i,p=0;j<i+k,p<k;j++,p++)
{
a[p]=l->elem[j-1];
}
for(j=i;j<l->last;j++)
{
l->elem[j-1]=l->elem[j+k-1];
}
l->last=l->last-k;
return (l);
}
void show(SeqList *L)//显示顺序表
return(head);
}
void reverse(link *head )//置换
{
link *p,*s,*t;
p=head;
s=p->next;
t=s->next;
while(s->next!=NULL)
{
t=s->next;
s->next=p;
p=s;
s=t;
}
s->next=p;
p=s;
head->next->next=NULL;
{
i=K;break;
}
}
for(j=L->last;j>=i;j--)
{
L->elem[j+1]=L->elem[j];
}
L->elem[i]=e;
L->last++;
return (L);
}
void show(SeqList *L)//显示顺序表
{
int i;
for(i=0;i<=L->last;i++)
{
printf("%d ",L->elem[i]);
}
}
void main()//主函数
{
int e,r;
SeqList *p,*p1;
printf("请输入线性表的长度:");
scanf("%d",&r);
p=InitList(r);
printf("请输入插入的元素:");
scanf("%d",&e);
{
int i;
for(i=0;i<=L->last;i++)
{
printf("%d ",L->elem[i]);
}
}
void main()//主函数
{
int a[100],r,i,k;
SeqList *p,*p1;
printf("请输入线性表的长度:");
scanf("%d",&r);
p=InitList(r);
printf("请输入链表的长度:");
相关主题