C语言数据结构之线性表的基本操作
2015-11-02 12:46
393 查看
线性表的基本操作
内容:
(1)顺序表的操作
输入一组整型元素序列,建立线性表的顺序存储结构。实现该线性表的遍历。在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。在该顺序表中删除或插入指定元素。 建立两个按值递增有序的顺序表,将他们合并成一个按值递增有序的顺序表。
(2)单链表的操作
输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 实现该线性表的遍历。在该单链表的第i个元素前插入一个整数。删除该单链表中的第i个元素,其值通过参数将其返回。建立两个按值递增有序的单链表,将他们合并成一个按值递减有序的单链表。要求利用原来#include<stdio.h>
#include<stdlib.h>
#define MAX 20
#define LISTINCREMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
void CreatList(SqList &L)
{//建立一个线性表
L.elem=(int*)malloc(MAX *sizeof(int));
if(!L.elem)
return;//exit(0)
L.listsize=MAX;
printf("输入表的长度:");
scanf("%d",&L.length);
printf("输入%d个数:",L.length);
for(int i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
}
void Traverse(SqList L){
//遍历
printf("表中数据为:");
for(int i=0;i<L.length;i++)
printf("%3d",L.elem[i]);
printf("\n");
}
void LocateElem(SqList L,int e){
//查找
int i;
printf("输入查找的元素:");
scanf("%d",&e);
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e){
printf("查找成功,查找元素为%d",L.elem[i]);
printf("\n");
return;
}
}
printf("查找失败");
printf("\n");
}
int makesureElem(SqList L,int e)
{
int i;
//确定要删除的元素
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e)
{
printf("要删除的元素 位置为 %d",i+1);
printf("\n");
return (i+1);
}
}
printf("元素不存在");
printf("\n"); return 0;
}
void ListInsert(SqList &L)
{//插入元素及其要插入的位置
int i,int e;
printf("输入要插入位置及元素\n");
scanf("%d%d",&i,&e);
printf("在顺序线性表中第%d个位置之前插入新的元素%d。\n",i,e);//在顺序线性表L中第i个位置之前插入新的元素e,
if(i<1||i>L.length+1) return; //i的合法位置为1<=i<=ListLength(L)+1
int *p,*q;
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
/*表示从链表的第i个元素开始一直到最后一个元素往后移一位p=&L.elem[L.length-1]
意思是p赋初值为链表的最后一个元素地址,p>=q表示循环知道p<q的时候结束,--p是使p指针的指向往前移一位*/
++L.length;
return;
}
int ListDelete(SqList &L){
//删除元素
int i,int e;
printf("输入要删除的元素");
scanf("%d",&e);
i=makesureElem(L,e);
if((i<1)||(i>L.length)) return 0;//i的合法值为1<=i<=ListLength(L)+1
else{
int *p,*q;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)*(p-1)=*p;//被删除元素之后的元素左移
--L.length;
printf("元素被删除");
}
return 0;
}
int main(){
SqList L;
CreatList(L);
Traverse(L);
LocateElem(L,1);
ListInsert(L);// ListInsert(L,3,8);
Traverse(L);
ListDelete(L);
Traverse(L);
return 0;
}
的存储空间
内容:
(1)顺序表的操作
输入一组整型元素序列,建立线性表的顺序存储结构。实现该线性表的遍历。在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。在该顺序表中删除或插入指定元素。 建立两个按值递增有序的顺序表,将他们合并成一个按值递增有序的顺序表。
(2)单链表的操作
输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 实现该线性表的遍历。在该单链表的第i个元素前插入一个整数。删除该单链表中的第i个元素,其值通过参数将其返回。建立两个按值递增有序的单链表,将他们合并成一个按值递减有序的单链表。要求利用原来#include<stdio.h>
#include<stdlib.h>
#define MAX 20
#define LISTINCREMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
void CreatList(SqList &L)
{//建立一个线性表
L.elem=(int*)malloc(MAX *sizeof(int));
if(!L.elem)
return;//exit(0)
L.listsize=MAX;
printf("输入表的长度:");
scanf("%d",&L.length);
printf("输入%d个数:",L.length);
for(int i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
}
void Traverse(SqList L){
//遍历
printf("表中数据为:");
for(int i=0;i<L.length;i++)
printf("%3d",L.elem[i]);
printf("\n");
}
void LocateElem(SqList L,int e){
//查找
int i;
printf("输入查找的元素:");
scanf("%d",&e);
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e){
printf("查找成功,查找元素为%d",L.elem[i]);
printf("\n");
return;
}
}
printf("查找失败");
printf("\n");
}
int makesureElem(SqList L,int e)
{
int i;
//确定要删除的元素
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e)
{
printf("要删除的元素 位置为 %d",i+1);
printf("\n");
return (i+1);
}
}
printf("元素不存在");
printf("\n"); return 0;
}
void ListInsert(SqList &L)
{//插入元素及其要插入的位置
int i,int e;
printf("输入要插入位置及元素\n");
scanf("%d%d",&i,&e);
printf("在顺序线性表中第%d个位置之前插入新的元素%d。\n",i,e);//在顺序线性表L中第i个位置之前插入新的元素e,
if(i<1||i>L.length+1) return; //i的合法位置为1<=i<=ListLength(L)+1
int *p,*q;
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
/*表示从链表的第i个元素开始一直到最后一个元素往后移一位p=&L.elem[L.length-1]
意思是p赋初值为链表的最后一个元素地址,p>=q表示循环知道p<q的时候结束,--p是使p指针的指向往前移一位*/
++L.length;
return;
}
int ListDelete(SqList &L){
//删除元素
int i,int e;
printf("输入要删除的元素");
scanf("%d",&e);
i=makesureElem(L,e);
if((i<1)||(i>L.length)) return 0;//i的合法值为1<=i<=ListLength(L)+1
else{
int *p,*q;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)*(p-1)=*p;//被删除元素之后的元素左移
--L.length;
printf("元素被删除");
}
return 0;
}
int main(){
SqList L;
CreatList(L);
Traverse(L);
LocateElem(L,1);
ListInsert(L);// ListInsert(L,3,8);
Traverse(L);
ListDelete(L);
Traverse(L);
return 0;
}
的存储空间
相关文章推荐
- 文件遍历排序函数
- Flex字符串比较 还有Flex字符串操作
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- ASP Cookies操作的详细介绍与实例代码
- perl数据库添加、删除、更新、查询操作例子
- 总结的5个C#字符串操作方法分享
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#操作XML文件实例汇总
- C#数据结构揭秘一
- C#中遍历Hashtable的4种方法
- C#中父窗口和子窗口之间控件互操作实例
- C#操作PowerPoint的方法
- SQL语句 操作全集 学习mssql的朋友一定要看
- C#模拟window操作鼠标的方法
- Erlang中遍历取出某个位置的最大值代码
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数