编写程序建立一个由5个整数组成的顺序表,在该表上实现插入元素、删除元素操作,并将顺序表每次操作完的数
编写程序建立一个由5个整数组成的顺序表,在该表上实现插入元素、删除元素操作,并将顺序表每次操作完的数据元素一一显示出来。(在P14的线性表的顺序存储的基础上实现该算法)....
编写程序建立一个由5个整数组成的顺序表,在该表上实现插入元素、删除元素操作,并将顺序表每次操作完的数据元素一一显示出来。(在P14的线性表的顺序存储的基础上实现该算法).
展开
展开全部
/***********线性表的基本操作只有两个,插入,删除。这里写三个:初始化,插入,岩雀删除。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *elem;
int length;
int listsize;
}Sqlist;
Status InitList_Sq(Sqlist *L) {//千万注意这里的参数是×L ,而不是&L,为什么?
L->elem = (ElemType *) malloc (LIST_INIT_SIZE * sizeof(ElemType) );//这里为什么是L->elem,而不是L.elem?
if(!L->elem) exit( OVERFLOW );
L->length=0;
L->listsize = LIST_INIT_SIZE;
return OK;//这句话纯属废话
}
Status ListInsert_Sq ( Sqlist *L, int i, ElemType e ){
ElemType *newbase, *p, *q;
if(i<1 || i>L->length+1) return ERROR;
if(L->length >粗银早= L->listsize) {
newbase = (ElemType *)realloc(L->elem, (L->listsize+LISTINCREMENT)*sizeof(ElemType) );
if(!newbase) exit(OVERFLOW);
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
q = &(L->elem[i-1]);
for( p = &(L->elem[L->length-1]); p >= q; --p)
*(p+1)=*p;
*q = e;
++L->length;
return OK;
}
Status ListDelete_Sq(Sqlist *L, int i, ElemType *e){
ElemType *p, *q;
if( (i<1) ||(i>L->length) ) return ERROR;
p = &(L->elem[i-1]);
*e = *p;
q=L->elem + L->length- 1;
for(++p; p<=q; ++p) *(p-1)= *p;
--L->length;
return OK;
}
Status ListDisplay(Sqlist A){
int i=0;
while(i < A.length) {
printf("%5d", A.elem[i]);
i++;
}
}
int main( void ) {
int e, i, a, b;
Sqlist A;
printf("初始化部分:\n");
InitList_Sq(&A);//注意:这里为什么是&A?
printf("基本操作:插入\n");
printf("请输入结点数:\n");
scanf("%d", &a);
for(i=0; i< a; i++){
printf("请输入第%d个数\n", i+1);
scanf("%d", &e);
printf("请输入位置:\n");
scanf("%d", &b);
ListInsert_Sq(&A,b,e);
}
printf("基本操作:删除\n");
printf("请输入删除位置:");
scanf("%d"搏辩,&i);
ListDelete_Sq(&A,i,&e);
ListDisplay(A);
printf("\n");
system("PAUSE");
}
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *elem;
int length;
int listsize;
}Sqlist;
Status InitList_Sq(Sqlist *L) {//千万注意这里的参数是×L ,而不是&L,为什么?
L->elem = (ElemType *) malloc (LIST_INIT_SIZE * sizeof(ElemType) );//这里为什么是L->elem,而不是L.elem?
if(!L->elem) exit( OVERFLOW );
L->length=0;
L->listsize = LIST_INIT_SIZE;
return OK;//这句话纯属废话
}
Status ListInsert_Sq ( Sqlist *L, int i, ElemType e ){
ElemType *newbase, *p, *q;
if(i<1 || i>L->length+1) return ERROR;
if(L->length >粗银早= L->listsize) {
newbase = (ElemType *)realloc(L->elem, (L->listsize+LISTINCREMENT)*sizeof(ElemType) );
if(!newbase) exit(OVERFLOW);
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
q = &(L->elem[i-1]);
for( p = &(L->elem[L->length-1]); p >= q; --p)
*(p+1)=*p;
*q = e;
++L->length;
return OK;
}
Status ListDelete_Sq(Sqlist *L, int i, ElemType *e){
ElemType *p, *q;
if( (i<1) ||(i>L->length) ) return ERROR;
p = &(L->elem[i-1]);
*e = *p;
q=L->elem + L->length- 1;
for(++p; p<=q; ++p) *(p-1)= *p;
--L->length;
return OK;
}
Status ListDisplay(Sqlist A){
int i=0;
while(i < A.length) {
printf("%5d", A.elem[i]);
i++;
}
}
int main( void ) {
int e, i, a, b;
Sqlist A;
printf("初始化部分:\n");
InitList_Sq(&A);//注意:这里为什么是&A?
printf("基本操作:插入\n");
printf("请输入结点数:\n");
scanf("%d", &a);
for(i=0; i< a; i++){
printf("请输入第%d个数\n", i+1);
scanf("%d", &e);
printf("请输入位置:\n");
scanf("%d", &b);
ListInsert_Sq(&A,b,e);
}
printf("基本操作:删除\n");
printf("请输入删除位置:");
scanf("%d"搏辩,&i);
ListDelete_Sq(&A,i,&e);
ListDisplay(A);
printf("\n");
system("PAUSE");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询