#define MAXSIZE 100
#include<stdio.h>
typedef int Elemtype;
typedef struct //创建顺序表结构
{
Elemtype data[MAXSIZE]; //定义一个长度100的存储空间?
int length; //结构体成员?线性表的长度
}Sqlist; //结构体名称
//****************************************************
//使表置空
//****************************************************
void Initlist(Sqlist &L)
{
L.length=0;
}
//****************************************************
//创建顺序表
//****************************************************
void Creatlist(Sqlist &L,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&L.data[i]);
L.length=n;
}
//****************************************************
//输出顺序表
//****************************************************
void Output(Sqlist L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.data[i]);
printf("\n");
}
//****************************************************
//在第i(a)个位置插入x(b)插入数据
//****************************************************
int Insert(Sqlist &L,int a,Elemtype b)
{
int j;
if(L.length==MAXSIZE-1)
{printf("表满"); return -1;}
if(a<1||a>L.length+2)
{printf("位置错"); return 0;}
for(j=L.length;j>=a-1;j--)
L.data[j+1]=L.data[j];
L.data[a-1]=b;
L.length++;
return 1;
}
//****************************************************
//查找数据a在顺序表第几位
//****************************************************
int location(Sqlist &L,Elemtype b)
{
int i=0;
while(i<=L.length&&L.data[i]!=b)
i++;
if(i>L.length) {printf("没有这个元素"); return -1;}
else printf("在表的第%d位",++i);
}
//****************************************************
//删除顺序表第b位的元素
//****************************************************
int deleteb(Sqlist &L,int a)
{
int j;
for(j=a;j<=L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return 1;
}
main()
{
Sqlist L; //定义一个线性表L
int m,i,x,a,b;
Initlist(L); //线性表置空
printf("请输入表的长度\n");
scanf("%d",&m);
printf("请输入%d个数据\n",m);
Creatlist(L,m); //创建一个长度为m的线性表
printf("创建的线性表如下\n");
Output(L); //输出线性表
printf("请输入要插入表的位置\n");
scanf("%d",&i);
printf("请输入要插入数据\n");
scanf("%d",&x);
Insert(L,i,x); //在第i个位置插入x
if(Insert(L,i,x)==1)
{printf("线性表结果如下\n");
Output(L); //输出线性表
}
printf("请输入要查找的数据\n");
scanf("%d",&a);
location(L,a); //查找数据a在顺序表第几位
printf("请输入要删除的位置\n");
scanf("%d",&b);
deleteb(L,b); //删除顺序表第b位的元素
{ if(deleteb(L,b)==1)
printf("线性表结果如下\n");
Output(L); //输出线性表
}
return 0;
}
麻烦帮我看一下,其它没错,就是插入以后显示都会重复显示
基于C语言的数据结构,怎样做顺序表插入
1、顺序表的插入,常用方法就是从插入点后平移数据。2、例如:void InsertSeqList(SeqList L, DataType x, int i){ \/\/将元素x插入到顺序表L的第i个数据元素之前 if(L.length==Maxsize) exit("表已满");if(i<1||i>L.length+1) exit("位置错");for (j=L.lenght; j>=i;...
C语言数据结构问题,我已经在线性表中插入了一个元素,为什么表的长度还是...
void SeqListInit(SeqList *L){ L->length = 0;} \/\/求线性表的长度 int SqlListLength(SeqList L){ return L.length;} \/\/顺序表的前插操作 void SeqListInsert(SeqList *L,int i,int x){ if(L->length == MAXSIZE)\/\/表满 { printf("表已满,无法进行插入操作!\\n");exit(0);...
求助:关于C++数据结构,结构体数组插入失败顺序表的问题
不知道你用的什么编译器,除了字符串直接可以用来初始化对象直接赋值以外,字符串给变量赋值是不可能通过的,因此你的字符串赋值操作本身就是错误的做法,你可以参考strcopy和memcopy两个函数看看字符串的赋值操作。
C语言数据结构:利用两个顺序栈来实现一个列队的功能时遇到的问题
s1已满,从栈顶到栈低依次是:5、4、3 s2非空,从栈顶到栈底依次是:1、2 此时要想在入栈一个元素6的话,按照你的想法,得把s1的数据出栈到一个缓冲区,然后把缓冲区中,在原来s1栈底的3挪动到s2的栈顶,然后s1的4、5依次压回栈s1,然后s1就能够空出栈顶的一个位置了,对吧?但是,这...
关于数据结构的问题,用C语言描述
1.栈、队列的定义及其相关数据结构的概念,包括:顺序栈,链栈,共享栈,循环队列,链队等。栈与队列存取数据(请注意包括:存和取两部分)的特点。2.递归算法。栈与递归的关系,以及借助栈将递归转向于非递归的经典算法:n!阶乘问题,fib数列问题,hanoi问题,背包问题,二叉树的递归和非递归遍历问题,图的深度遍历与栈的...
数据结构中的顺序表插入操作中if(i<1 || i>L->len+1)中 L-什么意思?还...
L是一个链表,在链表的宏定义typedef中,定义了很多链表的属性,比如说长度len,数据data,或者其他属性,而->的作用在C语言中就是代表某变量的某种属性 比如L->len+1就是取得链表L的长度属性,并且加1.
数据结构。。向顺序表中第i个元素之后插入一个值为x的元素
int InsElem(SqList &L,ElemType x,int i){ int j; if(i<1||i>L.length+1) return 0; if(L.length==MaxSize) return 0; for(j=L.length-1;j>=i;j--) L.data[j+1]=L.data[j ]; L.data[i]=x; L.length++; return 1;} ...
数据结构顺序循环队列中取模(求余)问题,C语言
即R<F 比如 一共10个元素 M=10 先入队9个元素,队头指向最后一个 即9 然后 出队5个元素,队尾指向5 再入队三个元素, 队头指向2 这是队内实际个数为(2-5+10)%10 = 7个 至于为什么要加上 是因为 当F=9 R=5的时候 (9-5+10)=14 14%10才是正确结果4 ...
数据结构问题求解
有L.length个元素的顺序表共有L.length+1个可能的插入位置,即插入位置可以是L.length+1,这相当于追加一个元素(插入发生在最后一个元素的后面)。如果是大于L.length就不合法,那无法在位置L.length+1处插入。
顺序表中插入和删除需要的平均移动次数,怎么算啊?请求大神们回答。求...
我们假设顺序表长度为n,由于顺序表的结点之间逻辑关系为邻接关系,所以当我们要将一个结点插入时,这个插入位置的后面的结点每一个都要移动以给新插入的结点让出位置,同时顺序表的长度加一,所以顺序表插入一个结点,平均需要移动n\/2个结点,由于移动了n\/2个结点我们插入一个结点的移动次数就是n\/2。