【数据结构】顺序表的实现(C语⾔)学习顺序表要掌握以下操作。
1、顺序表的初始化——置空表。
2、在顺序表后部插⼊值为x的节点。
3、打印顺序表的个节点值。
4、判断顺序表是否为空。
5、查顺序表中值为x的节点位置。
6、取得顺序表中第i个节点的值。
7、在顺序表的position位置插⼊值为x的节点位置。
8、删除表中第position位置的节点。
运⾏环境:code::blocks 17.12
下⾯是头⽂件
#ifndef SEQULIST_H_INCLUDED
#define SEQULIST_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int size_;
}sequence_list;
/
/置空表
void init(sequence_list *slt)
{
slt->size_=0;
}
//在顺序表后⾯进⾏插⼊
void append(sequence_list *slt,int x)
{
if (slt->size_==MAXSIZE)
{
printf("顺序表已满!");
exit(1);
}
slt->a[slt->size_]=x;
slt->size_=slt->size_+1;
}
//打印顺序表的各节点值
void display(sequence_list *slt)
{
int i;
if (!slt->size_)
{
printf("顺序表是空的!");
}
}
else
{
for (i=0;i<slt->size_;i++)
{
printf("%d",slt->a[i]);
if (i!=slt->size_-1)
{
printf(" -> ");
}
}
}
}
//判断顺序表是否为空
int isempty(sequence_list *slt)
{
return (slt->size_==0?1:0);
//是空的话返回1,不是返回0
}
//查顺序表中值为x的结点位置
int find_(sequence_list *slt,int x)
{
int i=0;
while(i<slt->size_ && slt->a[i]!=x)
{
i++;
}
return (i<slt->size_?i:-1);
}
//取出顺序表中第i个节点的值
void get(sequence_list *slt,int i)
{
printf("第%d个节点的值为:%d\n\n",i,slt->a[i-1]); }
//顺序表的插⼊操作
void insert_(sequence_list *slt,datatype x,int position) {
int i;
if (slt->size_==MAXSIZE)
{
printf("顺序表是满的没法插⼊!");
exit(1);
}
if (position<0 || position>slt->size_)
{
printf("插⼊的指定位置不存在!");exit(1);
}
for (i=slt->size_;i>position;i--)
{
slt->a[i]=slt->a[i-1];
}
slt->a[position]=x;
slt->size_++;
}
//顺序表的删除第position位置上的节点
void delete_(sequence_list *slt,int position )
{
int i;
if (!slt->size_)
{
printf("\n顺序表是空的!");
exit(1);
}
if (position<0 || position >= slt->size_)
{
printf("指定的删除位置不存在!");
exit(1);
}
for (i=position;i<slt->size_-1;i++)
{
slt->a[i]=slt->a[i+1];
}
slt->size_--;
}
void menu()
{
printf("\t|===================================|\t\n"); printf("\t| |\t\n");
printf("\t| 顺序表的相关操作 |\t\n");
printf("\t| |\t\n");
printf("\t|===================================|\t\n"); printf("\t|有如下选项: |\t\n");
printf("\t|===================================|\t\n"); printf("\t|【1】置空表 |\t\n");
printf("\t|【2】在顺序表的后部进⾏插⼊操作 |\t\n");
printf("\t|【3】打印顺序表的各节点位置 |\t\n");
printf("\t|【4】判断顺序表是否为空 |\t\n");
printf("\t|【5】查顺序表中值为x的位置节点 |\t\n");
printf("\t|【6】取得顺序表中第i个节点的值 |\t\n");
printf("\t|【7】顺序表的插⼊操作 |\t\n");
printf("\t|【8】顺序表的删除操作 |\t\n");
printf("\t|===================================|\t\n"); printf("\t|Ctrl+C结束该程序 |\t\n");
printf("\t|===================================|\t\n"); }
#endif // SEQULIST_H_INCLUDED
下⾯是程序
#include "sequlist.h"
#include "stdio.h"
int main ()
{
int i,k,a,count=0;
sequence_list slt;
while(1)
{
menu();
if(count==0)
{
printf("\n\n请输⼊你的选择:");count=1;
}
else
{
printf("\n\n请再次输⼊你的选择:");
}
scanf("%d",&i);
switch (i)
{
case 1:
{
init(&slt);
init(&slt);
printf("成功构造⼀个线性表。\n\n");
c语言listinsert函数break;
}
case 2:
{
printf("请输⼊⼀个数字,它将添加到顺序表的末尾:");
scanf("%d",&a);
append(&slt,a);
printf("\n成功在末尾添加进⼀个数据。\n\n");break;
}
case 3:
{
display(&slt);
printf("\n成功打印顺序表各节点的值。\n\n");break;
}
case 4:
{
if(isempty(&slt)) printf("该顺序表为空表。");
else printf("该顺序表不是空表。");
printf("已进⾏判断。\n\n");break;
}
case 5:
{
printf("请输⼊⼀个数字(可能存在于顺序表中):");
scanf("%d",&a);
if(find_(&slt,a)==-1)
{
printf("该数不存在于当前所创建的线性表中。");
}
else
{
printf("该数在顺序表中的位置是:%d\n",find_(&slt,a));
}
printf("已运⾏成功。\n\n");break;
}
case 6:
{
printf("请输⼊节点的序号,当前⼀共有%d个节点\n",slt.size_);
scanf("%d",&a);
get(&slt,a);
break;
}
case 7:
{
printf("当前顺序表为:");
display(&slt);
printf("\n请输⼊插⼊的数值:");
scanf("%d",&a);
printf("请输⼊插⼊的位置:");
scanf("%d",&k);
insert_(&slt,a,k);
printf("已运⾏成功。\n\n");
}
case 8:
{
printf("当前顺序表为:");
display(&slt);
printf("\n请输⼊想要删除的节点的序号,当前⼀共有%d个节点\n",slt.size_); scanf("%d",&a);
delete_(&slt,a);
printf("已运⾏成功。\n\n");
}
}
}
}
return 0; }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论