赞
踩
#include <stdio.h>
#include <stdlib.h>
typedef int type;
#define LIST_SIZE 100
#define LIST_ADD 10
struct SqList{
type *elem;
int length;
int size;
};
void InitList_Sq(SqList &L);
void DestroyList(SqList &L);
void ClearList(SqList &L);
void ListEmpty(SqList L);
void ListLength(SqList L);
void GetElem(SqList L,int i,type &e);
int LocateElem(SqList L,type e);
void PriorElem(SqList L,type cur_e,type &pre_e);
void NextElem(SqList L,type cur_e,type &next_e);
void ListInsert(SqList &L,int i,type e);
void ListDelete(SqList &L,int i,type &e);
void LsitTraverse(SqList L);
void menu();
int main(){
SqList L; type e,cur_e; int i;
int choice(1);
menu();
while(choice){
printf("请选择功能:");
scanf("%d",&choice);
switch(choice){
case 1:InitList_Sq( L ); break;
case 2:DestroyList( L ); break;
case 3:ClearList( L ); break;
case 4:ListEmpty( L ); break;
case 5:ListLength( L ); break;
case 6:int i; type e;
printf("输入数据序号:");
scanf("%d",&i); GetElem( L, i, e);
printf("/n第%d个数据:%d",i,e); break;
case 7:int p;
printf("输入数据:");
scanf("%d",e); p=LocateElem( L, e);
printf("/n数据%d的序号:%d",e,p); break;
case 8:type pre_e;
printf("输入数据:");
scanf("%d",cur_e); PriorElem( L, cur_e, pre_e);
printf("/n数据%d的前驱:%d",cur_e,pre_e); break;
case 9:type next_e;
printf("输入数据:");
scanf("%d",cur_e); NextElem( L, cur_e, next_e);
printf("/n数据%d的前驱:%d",cur_e,next_e); break;
case 10:printf("输入插入位置和数据:");
scanf("%d%d",&i,&e);
ListInsert( L, i, e); break;
case 11:printf("输入删除位置:");
scanf("%d",&i);
ListInsert( L, i, e);
printf("/n删除的数据:%d",e); break;
case 12:printf("所有数据信息:/n");
LsitTraverse( L ); break;
}
}
}
void InitList_Sq(SqList &L){
L.elem=(type *)malloc(LIST_SIZE*sizeof(type));
if(!L.elem) exit(-2);
L.length=0;
L.size=LIST_SIZE;
printf("构造完成!/n");
}
void DestroyList(SqList &L){
if(!L.elem) exit(-2);
free(L.elem);
printf("销毁完成!/n");
}
void ClearList(SqList &L){
if(!L.elem) exit(-2);
L.length=0;
printf("清空完成!/n");
}
void ListEmpty(SqList L){
if(!L.elem) exit(-2);
if(L.length) printf("该表非空!/n");
else printf("该表为空!/n");
}
void ListLength(SqList L){
if(!L.elem) exit(-2);
printf("该表的长度:%d/n",L.length);
}
void GetElem(SqList L,int i,type &e){
if(!L.elem) exit(-2);
if(i>L.length) exit(-2);
e=L.elem[i];
}
int LocateElem(SqList L,type e){
if(!L.elem) exit(-2);
for(int i=1;i<=L.length;i++)
if(L.elem[i]==e) return i;
return 0;
}
void PriorElem(SqList L,type cur_e,type &pre_e){
if(!L.elem) exit(-2);
for(int i=2;i<=L.length;i++)
if(L.elem[i]==cur_e)
{ pre_e=L.elem[i-1]; return ;}
}
void NextElem(SqList L,type cur_e,type &next_e){
if(!L.elem) exit(-2);
for(int i=1;i<L.length;i++)
if(L.elem[i]==cur_e)
{next_e=L.elem[i+1]; return ;}
}
void ListInsert(SqList &L,int i,type e){
if(L.length==L.size){
L.elem=(type *)realloc(L.elem,(L.size+LIST_ADD)*sizeof(type));
L.size+=LIST_ADD;
}
if(!L.length) {L.elem[1]=e; L.length++; return;}
if(!L.elem||i<1||i>L.length) exit(-2);
for(int j=L.length+1;j>i;j--)
L.elem[j]=L.elem[j-1];
L.elem[i]=e;
L.length++;
}
void ListDelete(SqList &L,int i,type &e){
if(!L.elem||i<1||i>L.length) exit(-2);
e=L.elem[i];
for(int j=i;j<L.length;j++)
L.elem[j]=L.elem[j+1];
L.length--;
}
void LsitTraverse(SqList L){
if(!L.elem) exit(-2);
for(int i=1;i<=L.length;i++)
printf("%d ",L.elem[i]);
printf("/n");
}
void menu(){
printf("/t/t功能菜单/n");
printf("/t1.构造表/n");
printf("/t2.销毁表/n");
printf("/t3.清空表/n");
printf("/t4.表空判断/n");
printf("/t5.表长/n");
printf("/t6.取数据/n");
printf("/t7.元素位置/n");
printf("/t8.前驱/n");
printf("/t9.后继/n");
printf("/t10.插入/n");
printf("/t11.删除/n");
printf("/t12.遍历/n");
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。