【数据结构】线性表的顺序存储完整程序
2016-07-26 14:41
671 查看
数据结构,线性表的顺序存储完整程序
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<iostream.h> #define LIST_INIT_SIZE 100 #define LISTNCREMENT 10 typedef struct { int *elem; int length; int listsize; }Sqlist; Sqlist InitSList(); void DeleteSList(Sqlist &L,int i); void InsertSList(Sqlist &L,int i,int e); void FindList(Sqlist L,int i); void InverseList(Sqlist L); void Print(Sqlist L); void main() { int i; Sqlist L; L=InitSList(); L.length=5; for(i=0;i<L.length;i++) L.elem[i]=i; printf("original list:\n"); Print(L); // printf("请输入表长: \n"); // scanf("%d",&L.length); // printf("表中的元素是:\n"); // for(i=0;i<L.length;i++) // scanf("%d",&L.elem[i]); cout<<"~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~"<<endl; cout<<"请选择:\n"; cout<<"1.插入元素:\n"; cout<<"2.删除元素:\n"; cout<<"3.查找元素:\n"; cout<<"4.顺序表逆置:\n"; int c,n,e; cin>>c; switch(c) { case 1: cout<<"请输入插入元素的位置n:\n"; cin>>n; cout<<"请输入插入的元素n:\n"; cin>>e; InsertSList( L,n,e); Print(L); break; case 2: cout<<"请输入删除元素的位置n:\n"; cin>>n; DeleteSList(L,n); Print(L); break; case 3: cout<<"请输入查找元素的位置:\n"; cin>>n; FindList(L,n); break; case 4: InverseList(L); break; default: printf("ERROR"); } // DeleteSList(L,2); // Print(L); /// InsertSList( L,2,88); // Print(L); // FindList(L,4); // InverseList(L); } /***********创建顺序表**********/ Sqlist InitSList() { Sqlist L; L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L.elem) exit(0); L.length=0; L.listsize=LIST_INIT_SIZE; return L; } /***************删除元素************/ void DeleteSList(Sqlist &L,int i) { int *p,*q; if((i<1)||(i>L.length)) printf("ERROR"); p=&(L.elem[i-1]); q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; L.length--; } /**************插入元素*************************/ void InsertSList(Sqlist &L,int i,int e) { int *newbase; int *q,*p; if(i<1||i>L.length+1) printf("ERROR"); if(L.length>=L.listsize) { newbase=(int *)realloc(L.elem,(L.listsize+LISTNCREMENT)*sizeof(int)); if(!newbase) exit(0); L.elem=newbase; L.listsize+=LISTNCREMENT; } q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]);q<=p;p--) { *(p+1)=*p; } *q=e; L.length++; } /*************查找元素********************/ void FindList(Sqlist L,int i) { int *p,e; // printf("请输入查找元素的位置:\n"); // scanf("%d",&i); p=&(L.elem[i-1]); e=*p; printf("请输出该位置的元素:\n"); printf("%d",e); printf("\n"); } /*********************顺序表逆置******************************/ void InverseList(Sqlist L) { int s,i; for(i=0;i<L.length/2;i++) { s=L.elem[i]; L.elem[i]=L.elem[L.length-i-1]; L.elem[L.length-i-1]=s; } cout<<endl; printf("新的顺序表中的元素是:\n"); for(i=0;i<L.length;i++) { printf("%d",L.elem[i]); printf(" ") ;// cout<<" ~ " ; //有问题,printf和cout混用 } } void Print(Sqlist L) { for(int i=0;i<L.length;i++) { printf("%d",L.elem[i]); printf(" "); } printf("\n"); }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#实现单链表(线性表)完整实例
- C#数据结构之单链表(LinkList)实例详解
- C#实现顺序表(线性表)完整实例
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force