没有合适的资源?快使用搜索试试~ 我知道了~
数据结构实验一线性表及其应用
4星 · 超过85%的资源 需积分: 20 10 下载量 27 浏览量
2010-12-26
10:35:19
上传
评论 2
收藏 49KB DOC 举报
温馨提示
试读
16页
数据结构的第一个实验 和对以链式存储结构存储的线性表,验证其插入、删除、查找、求长度和就地逆置等操作
资源推荐
资源详情
资源评论
实验一 线性表及其应用
09 计算机 1 白杨 0929210028
(一)顺序表操作验证
1.问题描述
对以顺序存储结构存储的线性表,验证其插入、删除、查找、就地逆置等操作。
2.基本要求
用菜单实现操作选择。
3.测试数据
自拟。
(三)单链表操作验证
1.问题描述
对以链式存储结构存储的线性表,验证其插入、删除、查找、求长度和就地逆置等操作。
2.基本要求
用菜单实现操作选择。
3.测试数据
自拟。
说明:选做实验内容详见实验手册
/* 顺序表操作验证 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
//初始化顺序表
int Init(SqList &L)
{
L.elem = (int *)malloc(100 * sizeof(int));
if(!L.elem)
return 0;
L.length = 0;
L.listsize = 100;
return 1;
}
//清空顺序表
void Clear(SqList &L)
{
free(L.elem);
L.elem = NULL;
L.length = 0;
}
//在第 i 个位置上插入一个元素
int Insert(SqList &L, int i, int e)
{
int j, *newbase;
if (i<1 || i>L.length+1) return 0;
if (L.length >= L.listsize)
{
newbase = (int *)realloc(L.elem, (L.listsize+1) * sizeof(int));
if(!newbase)
return 0;
L.elem = newbase;
L.listsize ++;
}
for (j=L.length; j>=i ; --j)
{
L.elem[j] = L.elem[j-1];
}
L.elem[j] = e;
L.length++;
return 1;
}
//返回元素 e 在顺序表中的位置
int Locate(SqList L, int e)
{
int i = 1;
int *p;
p = L.elem;
while(i<=L.length && !(*p == e))
{
i++;
p++;
}
if(i <= L.length) return i;
return 0;
}
//删除第 i 个位置上的元素
int Delete(SqList &L, int i, int &e)
{
int j;
if(i<1 || i>L.length) return 0;
e = L.elem[i-1];
for(j=i; j<L.length; j++)
L.elem[j-1] = L.elem[j];
L.length--;
return 1;
}
//就地逆置
void Reverse(SqList &L)
{
int i, tmp;
for(i=0;i<L.length/2;i++)
{
tmp = L.elem[i];
L.elem[i] = L.elem[L.length-i-1];
L.elem[L.length-i-1] = tmp;
}
}
//输出顺序表
void Print(SqList L)
{
int i;
printf("%d\n",L.length);
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
//菜单函数
int menu(void)
{
int num;
//clrscr();
printf("\n\n");
printf(" MENU \n");
printf(" ===========================\n");
printf(" Sq-list operation\n");
printf(" 1. print\n");
printf(" 2. insert\n");
printf(" 3. delete\n");
printf(" 4. Locate\n");
printf(" 5. clear\n");
printf(" 6. init\n");
printf(" 7. reverse\n");
printf(" 0. exit \n");
printf(" ===========================\n");
printf(" Choice(0,1,2,3,4,5,6,7):");
scanf("%d",&num);
return num;
}
int main()
{
int Init(SqList &L); //初始化顺序表
void Clear(SqList &L); //清空顺序表
int Insert(SqList &L, int i, int e); //在第 i 个位置上插入一个元素
int Locate(SqList L, int e); //返回元素 e 在顺序表中的位置
int Delete(SqList &L, int i, int &e); //删除第 i 个位置上的元素
void Print(SqList L); //输出顺序表
void Reverse(SqList &L); //就地逆置
int menu(void); //菜单函数
int n, i, e, k;
SqList L;
Init(L);
bool flag = 1;
//clrscr();
do{
int num = menu();
switch(num)
{
case 1:
Print(L);
break;
case 2:
printf("Input numbers to creat list(end by=0):");
scanf("%d",&n);
while(n--)
{
printf("input location to insert before. i=");
scanf("%d",&i);
printf("input a number to insert. e=");
scanf("%d",&e);
if(!Insert(L,i,e))
{
printf("Insert location is not correct!\n");
n++;
printf("Please input location to insert again.\n");
}
剩余15页未读,继续阅读
资源评论
- lvjianchi2014-12-25还是当年考试时下的,内容还不错
ctx520csq
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功