线性表的顺序表示及其基本操作
2017-08-11 19:23
441 查看
#include<stdio.h> #include<stdlib.h> #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OVERFLOW 1 #define OK 1 #define ERROR 0 /*基本操作 Status Initlist_Sq(Sqlist &L); Status Creat_Sq(Sqlist &L); Status Destory_Sq(Sqlist &L); Status clear_Sq(Sqlist &L); Status ListEmpty(Sqlist &L); Status GetElem(Sqlist &L,int i); Status GetElem(Sqlist &L,int i); Status insert_Sq(Sqlist &L,int i,int e); Status delete_Sq(Sqlist &L,int j); Status inverse_Sq(Sqlist &L);//就地逆置 void show_Sq(Sqlist L); */ typedef int ElemType; typedef int Status; typedef struct list{ ElemType *elem;//存储空间基址 int length;//当前长度 int listsize;//当前分配存储量 }Sqlist; //构造一个空的线性表L Status Initlist_Sq(Sqlist &L) { L.elem=(ElemType*)malloc(LIST_INIT_SIZE *sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK; } //创建线性表 Status Creat_Sq(Sqlist &L) { int i; int a;//输入元素个数 printf("请输入要创建的元素个数:\t"); scanf("%d",&a); Initlist_Sq(L); L.length=a; printf("请输入线性表的元素:"); getchar(); for(i=0;i<a;i++) { scanf("%d",& 4000 amp;L.elem[i]); } return OK; } //销毁线性表 Status Destory_Sq(Sqlist &L) { if(L.elem) free(L.elem); printf("完成顺序表的销毁\n"); return OK; } //清空线性表 Status clear_Sq(Sqlist &L) { L.length=0; return OK; } //空表验证 Status ListEmpty(Sqlist &L) { if(L.length==0) printf("空表"); else printf("不是空表"); return OK; } //用e返回表中元素 Status GetElem(Sqlist &L,int i) { ElemType e; if(i<1||i>L.length) printf("i值不合法\n"); else e=*(L.elem+i-1); printf("%d",e); return OK; } //插入操作函数 Status insert_Sq(Sqlist &L,int i,int e) { ElemType *p,*q,*newbase; 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 delete_Sq(Sqlist &L,int j) { ElemType *p,*q; if(j<1||j>L.length+1) return ERROR; for(p=&(L.elem[j-1]);p<&(L.elem[L.length]);++p) { *p=*(p+1); } --L.length; return OK; } Status inverse_Sq(Sqlist &L)//就地逆置 { if(L.length==0) return ERROR; ElemType temp; int i=0,j=L.length-1; for(i=0;i<=(L.length/2)-1;i++) { temp=L.elem[i]; L.elem[i]=L.elem[j]; L.elem[j]=temp; j--; } return OK; } //遍历函数 void show_Sq(Sqlist L) { for(int i=0;i<L.length;i++) { printf("%d\t",L.elem[i]); } } int main() { Sqlist L; Creat_Sq(L); int a=1; while(a) { printf("\n请输入要进行的操作:\n 1.遍历\t2.插入\t3.删除\t4.销毁\t5.清空\t6.空表验证\t7.取元素\t8.逆置"); int i,k; scanf("%d",&k); switch(k) { case 1:show_Sq(L); break; case 2:int j,e; printf("请输入第i个元素之前插入e:\t"); getchar(); scanf("%d%d",&i,&e); insert_Sq(L,i,e); break; case 3: printf("请输入要删除第i个元素:\t"); getchar(); scanf("%d",&i); delete_Sq(L,i); break; case 4:Destory_Sq(L); break; case 5:clear_Sq(L); break; case 6:ListEmpty(L); break; case 7:scanf("%d",&i); printf("取第%d个元素:",i); GetElem(L,i); break; case 8:inverse_Sq(L); break; default:printf("输入的数字不正确\n"); break; }//switch printf("\n是否还要进行操作?(选择是按 1,选择否按 0):");//判断程序是否继续进行 scanf("%d",&i); if(i!=1) a=0; }//while return 0; }
相关文章推荐
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 顺序表示的线性表的基本操作
- 线性表的顺序表示和实现基本操作之插入元素
- 线性表的基本操作实现及其应用之顺序表的建立与操作实现
- 线性表----队列(顺序表示)的基本操作
- 线性表----循环队列(顺序表示)的基本操作
- 线性表的顺序表示和基本操作的实现
- 栈的顺序存储及其基本操作
- 数据结构——顺序表及其基本操作
- 线性表之顺序存储,基本操作
- 栈的顺序存储及其基本操作
- 队列的顺序存储及其基本操作
- 实验一线性表的基本操作实现及其应用
- 数据结构实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 顺序表的12个基本操作及其检验
- 队列的顺序存储及其基本操作
- 实验三:栈和队列的基本操作实现及其应用——顺序栈
- 实验一线性表的基本操作实现及其应用
- 线性顺序表的基本操作