数据结构实验一顺序表的实现和应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
printf("输入要删除的元素个数:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("输入要删除的第%d个元素所在的位置:\n",i+1);
scanf("%d",&m);
if(!ListDelete(&L,m))
printf("删除失败\n");
ListTraverse(&L);
printf("%d",head->data );
}
int LENGTH(struct node *head)
{
struct node *p=head;
int j=1;
while(p->next!=head)
{
p=p->next;
j++;
}
return j;
}
struct node * DELETE(struct node *head, int m)
{
if(m<1||m>L->length+1)
return ERROR;
if(L->length > L->listsize)
{
ElemType *newbase;
newbase=(ElemType *)realloc(L->elem,(L->listsize+INCREMENT)*sizeof(ElemType));
L->length++;
return OK;
}
int ListDelete(SqList *L,int m)//在顺序表中删除元素
{
if(m<1||m>L->length)
return ERROR;
ElemType *p;
p=&(L->elem[m-1]);
for(;m<L->length;m++)
int length;
int listsize;
}SqList;
static SqList L;
static int e;
int ListInit(SqList *L)//创建顺序表
{
int i,length;
printf("输入顺序表的长度:\n");
scanf("%d",&length);
L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
}
实验结果:
顺序表的实现和应用
实验目的:
1.熟悉线性表的定义和基本操作;
2.掌握线性表的顺序存储结构设计与基本操作的实现。
实验内容与要求:
1.定义线性表的顺序存储表示;
2.基于所设计的存储结构实现线性表的基本操作;
3.编写一个主程序对所实现的线性表进行测试;
4.线性表的应用。
实验一
使用菜单方式实现顺序表的各种操作,包括创建、插入、删除、显示。
printf("输入数m:\n");
scanf("%d",&m);
JOSEPHU(n,k,m);
printf("\n");
}
void JOSEPHU(int n,int k,int m)//调用函数
{
int i;
for(i=1;i<=n;i++)
{
p=(struct node * ) malloc(sizeof(struct node));
算法设计:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
#define LIST_INIT_SIZE100
#define INCREMENT10
typedef struct
{
ElemType *elem;
scanf("%d",&n);
printf("输入要插入的元素及插入的位置,以空格隔开:\n");
for(i = 0; i < n; i ++)
{
scanf("%d%d",&e,&m);
if(!ListInsert(&L,e,m))
printf("插入失败\n");
ListTraverse(&L);
{
struct node *p=head;
int j = 0;
while(j < m-1 )
{
p = p->next;
++ j;
}
head=p->next->next;
q = p->next;
p->next = q->next;
printf("%d ",q->data);
free(q);
return head;
if(i==1)
{
head=q=p;
p->data=i;
}
else
{
p->data=i;
q->next=p;
q=p;
}
}
p->next=head;
head=p=q;
head=DELETE(head,k+m-1);
while(LENGTH(head)!=1)
head=DELETE(head,m-1);
L->elem[m-1]=L->elem[m];
L->length--;
return OK;
}
int main()//主函数
{
int i,n,m;
if(ListInit(&L)==ERROR)
{Leabharlann Baidu
printf("创建失败\n");
return ERROR;
}
ListTraverse(&L);
printf("输入要插入元素的个数:\n");
算法设计:
#include<stdio.h>
#include<malloc.h>
struct node
{
int data;
struct node *next;
};
struct node *head,*p,*q;
void JOSEPHU(int n,int k,int m);
int LENGTH(struct node *head);
return OK;
}
void ListTraverse(SqList *L)//显示顺序表
{
int i;
printf("当前表为:\n");
for(i=0;i<L->length;i++)
printf("%d ",L->elem[i]);
printf("\n");
}
int ListInsert(SqList *L,int e,int m)//在顺序表中插入元素
}
return 0;
}
实验结果:
实验二
已知n个人用编号1..n表示,围坐在一张圆桌周围,编号为k的人从1开始报数数到m的那个人出列,他的下一个人又从1开始继续报数,数到m的那个人出列,。。。,依次重复下去,直到圆桌周围的人全部出列。要求,主函数里面实现n、k、m的录入,以及函数调用JOSEPHU(n,k,m)。程序必须输出整个的出列编号顺序。
struct node * DELETE(struct node *head, int m);
int main()
{
int n,k,m;
printf("输入人数n:\n");//输入参数n,k,m
scanf("%d",&n);
printf("输入开始报数的第k个人(k<=n):\n");
scanf("%d",&k);
if(!newbase)
return ERROR;
L->elem=newbase;
L->listsize+=INCREMENT;
}
ElemType *p,*q;
q = &(L->elem[m-1]);
for(p=&(L->elem[L->length-1]);p>=q;p--)
*(p+1)=*p;
*q=e;
if(!L->elem)
return ERROR;
printf("输入%d个元素,以空格隔开:\n",length);
for(i=0;i<length;i++)
scanf("%d",&L->elem[i]);
L->length =length;
L->listsize = LIST_INIT_SIZE;
相关文档
最新文档