线性表——创建、插入、删除、查找
来源:互联网 发布:国家顶级域名 编辑:程序博客网 时间:2024/05/17 22:37
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100//初始分配量
#define LISTINCREMENT 10//分配增量
#define OK 1
#define ERROR 0
typedef struct
{
int *elem;//存储空间基址
int len;//当前长度
int listsize;//当前分配的存储容量(以sizeof(int)为单位)
}SqList;
//初始化线性表
int InitList_Sq(SqList *L)
{
//使用malloc函数,申请一段连续的存储空间
L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem) exit(0);//存储分配失败
L->len=0;//空表长度为0
L->listsize=LIST_INIT_SIZE;//初始存储容量
return OK;
}
//向线性表中插入数据
int ListInsert_Sq(SqList *L,int i,int e)
{
if(i<1||i>L->len+1)
return ERROR;//插入位置不对,退出
if(L->len>=L->listsize)//当前空间不够
{
//使用realloc函数,在原本的基地址上申请更大的存储空间
int *newbase=(int *)realloc(L->elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(int));//新基址
//如果申请空间失败则结束程序
if(!newbase) exit(0);
L->listsize+=LISTINCREMENT;//增加存储容量
}
int *q=&(L->elem[i-1]);//插入位置
int *p;
for(p=&L->elem[L->len-1];p>=q;--p)//p指向最后一个位置然后依次向前
*(p+1)=*p;//插入位置元素及之后元素后移
*q=e;//插入e
++L->len;//表长度+1
return OK;
}
//删除线性表中的数据
int ListDelete_Sq(SqList *L,int i,int *e)
{
if(i<1||i>L->len)
return ERROR;//删除位置不对,退出
int *p=&(L->elem[i-1]);//删除元素的位置
*e=*p;//被删除元素的值赋给e
int *q=L->elem+L->len-1;//表尾元素位置
for(++p;p<=q;++p)
*(p-1)=*p;//被删除元素之后的元素左移
L->len--;//表长度-1
return OK;
}
//输出线性表中的数据
int ListSearch_Sq(SqList *L,int *e)
{
int i=1;
int *p=L->elem;
while(i<=L->len&&!(*p==*e))
{
i++;
p++;
}
if(i<=L->len)
return i;
else
return 0;
}
void ListShow_Sq(SqList *L)
{
int i;
for(i=0;i<L->len;i++)
{
printf("%d ",L->elem[i]);
}
printf("\n");
}
int main()
{
int i;
SqList L;
InitList_Sq(&L);
int n;
printf("原始数据个数是:");
scanf("%d",&n);
printf("输入线性表中%d个原始数据:",n);
for(i=0;i<n;i++)
{
int t;
scanf("%d",&t);
ListInsert_Sq(&L,L.len+1,t);
}
printf("原始数据为:");
ListShow_Sq(&L);
while(1)
{
printf("1:插入 2:删除 3:查找 0:退出\n");
printf("输入你的选择:");
int xuan;
scanf("%d",&xuan);
int t,shu;
if(xuan==1)
{
printf("请输入数据插入的位置t和数值shu:");
scanf("%d%d",&t,&shu);
printf("%s",ListInsert_Sq(&L,t,shu)?"插入成功.\n":"插入失败.\n");
printf("插入后:");
ListShow_Sq(&L);
}
if(xuan==2)
{
printf("请输入数据删除的位置t :");
scanf("%d",&t);
if(ListDelete_Sq(&L,t,&shu))
printf("删除成功.删除的数据是:%d\n",shu);
else
printf("删除失败.位置有误.");
printf("删除后:");
ListShow_Sq(&L);
}
if(xuan==3)
{
printf("请输入要查找的数据shu :");
scanf("%d",&shu);
if(ListSearch_Sq(&L,&shu))
printf("查找成功.查找的数据位置是:%d\n",ListSearch_Sq(&L,&shu));
else
printf("查找失败.没有此数据.\n");
}
if(xuan==0)
break;
}
return 0;
}
- 线性表——创建、插入、删除、查找
- 线性链表 查找 插入 删除 创建 merge
- 链表——创建、插入、删除、查找
- 线性表建立、插入、删除、查找应用
- 线性表的插入,删除,合并,查找
- 线性表的插入、查找与删除
- 线性表之顺序表的创建、初始化、查找、删除、插入和合并
- 数据结构_线性表_顺序表 的创建,插入,删除,查找
- 线性表的基本操作,包括:创建、插入、删除、查找等基本操作
- 线性表---顺序表(查找、插入与删除)
- 线性表的输入输出插入删除查找(顺序表示)
- 线性表中实现查找、删除、插入元素
- 线性表的顺序储存结构 初始化、查找、删除、插入
- 线性链表的查找插入删除算法
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- 数据结构 P28-29 算法实现 线性表的链式存储结构——链表的查找、插入与删除
- 链表的全部操作——创建、插入、查找、删除、计算长度
- 单链线性表的创建,插入,删除及合并
- Android显示提示信息,实现两个界面之间的跳转
- 针对transform中的几种值的先后顺序
- IPC
- 一些用法一一利用Mask记录一些开关选项
- JAVA Spring web mvc 学习 之 3:DispatcherServlet
- 线性表——创建、插入、删除、查找
- easyUI DataGrid View(数据表格展示) 表格添加按钮
- 2017.9.13 序列维护 思考记录
- 第二周项目——多文件
- 欢迎使用CSDN-markdown编辑器
- C#进阶 09 复合赋值运算符跟一元二元运算符
- CCF markdown
- 爬虫框架Scrapy实战之批量抓取招聘信息--附源码
- Charset的基本运用以及ByteBuffer-position的注意点