线性表顺序存储结构实现(线性表-数据结构作业)
2016-04-14 11:17
218 查看
#include<stdio.h> #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length; }SqList; void InitList(SqList *L) { L->length=5; int i; for(i=0;i<5;i++) { L->data[i]=i+1; } return; } int ListLength(SqList L) { return L.length; } bool ListEmpty(SqList L) { if(L.length==0)return false; else return true; } void ClearList(SqList *L) { L->length=0; return; } bool GetElem(SqList L,int i,int *e) { if(i==0||i>L.length||L.length==0)return false; else { *e=L.data[i-1]; return true; } } int LocateElem(SqList L,int e) { int i; if(L.length==0)return 0; else{ for(i=0;i<L.length;i++) { if(L.data[i]==e) { return i+1; break; } else if(i==L.length-1&&L.data[L.length-1]!=e) { return 0; break; } }} } bool ListInsert(SqList *L,int i,int e) { if(i<=0||i>L->length+1||L->length==MAXSIZE)return false; else { //插入数据位置不在表尾 if(i<=L->length){ int k; for(k=L->length-1;k>=i-1;k--) { L->data[k+1]=L->data[k]; }} L->data[i-1]=e; L->length++; return true; } } void PrintList(SqList L) { int i; for(i=0;i<L.length;i++) { printf("%d ",L.data[i]); } printf("\n"); return; } bool ListDelete(SqList *L,int i,int *e) { if(L->length==0||i<=0||i>L->length)return false; else { *e=L->data[i-1]; if(i<L->length)//删除位置不在表尾 { int k; for(k=i;k<L->length;k++) { L->data[k-1]=L->data[k]; } } L->length--; return true; } } int main() { SqList L; //初始化 InitList(&L); //判断是否为空 if(ListEmpty(L))printf("非空\n"); else printf("空\n"); //读取顺序表中元素个数 printf("顺序表中元素个数为%d\n",ListLength(L)); //读取 int i,e; printf("请输入您要读取的数字序号:"); scanf("%d",&i); if(GetElem(L,i,&e)) printf("第%d个元素是%d\n",i,e); else if(!GetElem(L,i,&e)) printf("发生错误请重新输入\n"); //查找 printf("请输入您要查找的数字:"); scanf("%d",&e); if(LocateElem(L,e)!=0)printf("您查找的数字序号为%d\n",LocateElem(L,e)); else printf("您查找的数字不存在\n"); //插入 printf("请输入您要插入的数字:"); scanf("%d",&e); printf("请输入您要插入的位置:"); scanf("%d",&i); ListInsert(&L,i,e); printf("插入后的顺序表如下:\n"); PrintList(L); //删除 printf("请输入您要删除的数字位置:"); scanf("%d",&i); ListDelete(&L,i,&e); printf("您删除的数字为%d\n",e); printf("删除后的顺序表如下:\n"); PrintList(L); //清空 ClearList(&L); //判断是否为空 if(ListEmpty(L))printf("非空\n"); else printf("空\n"); return 0; }
相关文章推荐
- C/C++基础知识02---数据结构
- 数据结构知识点总结
- 数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说
- 【数据结构】Orthogonal-List 十字链表(更新时间:2016-04-15)
- 数据结构Step by Step之树(1)- 二叉树 前序、中序、后序 LeetCode105根据前序中序的顺序构造树
- 数据结构--单向链表C实现
- 数据结构之栈
- 【数据结构】Doubly-Linked List双向链表(更新时间:2016-04-13)
- lightoj 1085
- HashMap的数据结构
- 数据结构学习笔记(七)--图
- 数据结构与算法习题汇总(3)
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之二叉树四:还原二叉树
- Huffman树的简单实现
- 数据结构中八大排序算法
- 用于并行计算的多线程数据结构,第 2 部分: 设计不使用互斥锁的并发数据结构
- 用于并行计算的多线程数据结构,第 1 部分: 设计并发数据结构
- 栈的数组表示
- 从键盘读入n个整数(升序),请编写算法实现: 建立带表头结点的单链表; 显示单链表,(形如:H->10->20->30->40); 在有序单链表中插入新的数据元素x; 将单链表就地逆