顺序
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
的实现和应用
实验目的:
1.熟悉线性表的定义和基本操作;
2.掌握线性表的顺序存储结构设计与基本操作的实现。
实验内容与要求:
1.定义线性表的顺序存储表示;
2.基于所设计的存储结构实现线性表的基本操作;
3.编写一个主程序对所实现的线性表进行测试;
4.线性表的应用。
实验一
使用菜单方式实现顺序表的各种操作,包括创建、插入、删除、显示。
算法设计:
#include
#include
#define OK 1
#define ERROR 0
typedef int ElemType;
#define LIST_INIT_SIZE 100
#define INCREMENT 10
typedef struct
{
ElemType *elem;
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));
if(!L->elem)
return ERROR;
printf("输入%d个元素,以空格隔开:\n",length);
for(i=0;ielem[i]);
L->length =length;
L->listsize = LIST_INIT_SIZE;
return OK;
}
void ListTraverse(SqList *L) //显示顺序表
{
int i;
printf("当前表为:\n");
for(i=0;ilength;i++)
printf("%d ",L->elem[i]);
printf("\n");
}
int ListInsert(SqList *L,int e,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));
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;
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(;mlength;m++)
L->elem[m-1]=L->elem[m];
L->length--;
return OK;
}
int main() //主函数
{
int i,n,m;
if(ListInit(&L)==ERROR)
{
printf("创建失败\n");
return ERROR;
}
ListTraverse(&L);
printf("输入要插入元素的个数:\n");
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);
}
printf("输入要删除的元素个数:\n");
scanf("%d",&n);
for(i=0;i
#include
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);
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);
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));
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);
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)
{
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;
}
实验结果:
3