一个数据结构线性表方面的题,请用C语言编出来,并能实现,望有志者帮一下忙,谢谢~~~~

作者&投稿:唐亚 (若有异议请与网页底部的电邮联系)
数据结构(C语言描述) 线性表实验~

#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int * elem;
int length;
int listsize;
}SqList;
//SqList sq;
void InitList_Sq(SqList *sq) //初始化列表
{
sq->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
sq->length=0;
sq->listsize=LIST_INIT_SIZE;
printf("---申请空间成功---!
");
}
void GetElem(SqList *sq,int i)//获取第i位置元素的值
{
int *p;
p=&(sq->elem[i-1]);
printf("%d",*p);
printf("
");
}
int ListInsert_Sq(SqList *sq,int i,int a)//在i位置之前插入a
{
int *p,*q;
if(isq->length+1)
{
printf("---位置不合法---!
");
return 0;
}
if(sq->length>=sq->listsize)
{
int* newbase=(int *)realloc(sq->elem,(sq->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
{
printf("申请空间溢出
");
return 0;
}
sq->elem=newbase;
sq->listsize+=LISTINCREMENT;
}
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=&(sq->elem[sq->length-1]);//q指向最后一个元素
for(;q>=p;--q) *(q+1)=*q;
*p=a;
++sq->length;
return 1;
}
int ListDelete_Sq(SqList *sq,int i) //删除i位置上的值
{
int *p,*q;
if(isq->length) return 0;
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=sq->elem+sq->length-1;//q指向最后一个元素
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
--sq->length;
return 1;
}
void visit(SqList *sq)//输出数据
{
int i=1;
for(;ilength;i++)
{
int *p;
p=&sq->elem[i-1];
printf("%d",*p);
printf(" ");
}
}
void main()
{
int i=1,a=0,boo=1,number=0;
SqList s,*sq;
sq=&s;
InitList_Sq(sq);
printf("初始化空表
");
printf("输入数据个数:
");
scanf("%d",&number);
printf("输入%d个数据:",number);
printf("
");
for(;i<=number;i++)
{
scanf("%d",&a);
if(boo=ListInsert_Sq(sq,i,a))
{
printf("---插入成功!---
");
}
else
{
printf("---插入不成功,重新插入---!
");
i=i-1;
}
}
printf("输出所有元素
");
visit(sq);
printf("
");
printf("输出删除的位置:");
scanf("%d",&a);
if(boo=ListDelete_Sq(sq,a))
{
printf("---数据删除成功!---
");
}else
{
printf("---没有删除成功---
");
}
printf("输出所有元素:
");
visit(sq);
printf("
");
printf("输出要显示数据的位置:");
scanf("%d",&a);
printf("输出%d位置数值
",a);
if(asq->length)
{
printf("---输出位置的数据不存在---
");
}
else
{
GetElem(sq,a);
}

}
以上是可直接运行的源程序
运行结果:
---申请空间成功---!
初始化空表
输入数据个数:
3
输入1个数据:3
---插入成功!---
输入2个数据;8
---插入成功!---
输入3个数据:5
---插入成功!---
输出所有元素:3 5 8
输出删除的位置:2
---数据删除成功!---
输出所有元素;3 8
输出要显示数据的位置:2
"输出2位置数值:8

#define TRUE 1
#define FALSE 0

typedef struct
{
char str[255];
int len;
}List;

int ListInit(List *l)
{
l->len=0;
return TRUE;
}

int ListLength(List *l)
{
return l->len;
}

其他自己写吧。

自己学习,然后才能学到知识。

//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

#define CF "%d\t"
typedef int datatype;
typedef struct NODE{
datatype data;
struct NODE *next;
} node;

node *mer(node *la,node *lb)/*合并表*/
{
node *t1,*t2,*lrc,*lnew=NULL;
if (la->data<=lb->data)
{
lnew=la;
la=la->next ;
lb=lb->data==lnew->data?lb->next :lb;
}
else
{
lnew=lb;
lb=lb->next;
}
lrc=lnew;
while (la&&lb)
{
if (la->data <=lb->data ) {
lnew->next =la;
t1=la=la->next ;
t2=lb=lb->data==lnew->next->data?lb->next :lb;

}

else
{
lnew->next=lb;
t2=lb=lb->next;
t1=la=la->data==lnew->next->data?la->next :la;
}
lnew=lnew->next ;
la=t1;
lb=t2;
}
lnew->next=la?la:lb;
return lrc;
}

void prt(node *a)/*输出表*/
{
node *t=a;
while (t)
{

printf(CF,t->data );
t=t->next ;

}
}
node *init(datatype *data,int len)/*初始化表*/
{
node *rt=malloc(sizeof(node));
node *rc=rt;
int i;
rt->data=data[0];
for (i=1; i<len; i++) {
rt->next =malloc(sizeof(node));
rt->next->data =data[i];
rt=rt->next ;
}
rt->next =NULL;
return rc;
}
void del(node *a)/*删除表*/
{
if (a->next ) del(a->next );
free(a);

}
int main(void)
{
node *la,*lb,*lc;
int a[]={3,5,7,8,9,10},b[]={2,3,4,5,6,7};
la=lb=lc=NULL;

la=init(a,6);
lb=init(b,6);
lc=mer(la,lb);

prt(lc);
del(lc);
return 0;
}
//---------------------------------------------------------------------------

#include <stdio.h>

main()
{
int a[] = {3,5,7,8,9,10};
int b[] = {2,3,4,5,6,7};
int c[10] = {0};
int i,j,k,l = 0;
int t,m;
for (i = 0; i < 6; i++,l++)
{
c[i] = a[i];
}

for (i = 0; i < 6; i++)
{
t = 0;
for (j = 0; j < 6; j++)
{
if (b[i] == a[j])
{
t = 1;
break;
}
}
if (!t)
{
for (k = 0; k < l; k++)
{
if (b[i] < c[k])
{
for (m = l; m > k; m --)
{
c[m] = c[m - 1];
}
c[k] = b[i];
break;
}
}
l++;
}
}
;
}

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OK 1
#define OVERFLOW -2
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef int Status;

typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;

Status Creat_Sq(SqList &L){
int i,j;
printf("\n请输入顺序表的长度:");
scanf("%d",&L.length);
for(i=0;i<=L.length-1;i++)
{printf("请输入第%d个元素:",i+1);
scanf("%d",&L.elem[i]);}
printf("\n原始顺序表:");
for(j=0;j<=L.length-1;j++)
{
printf("%d,",L.elem[j]);}
return OK;
}

void MergeList_Sq(SqList La,SqList Lb,SqList &Lc){
ElemType *pa,*pb,*pc,*pa_last,*pb_last;
pa=La.elem;
pb=Lb.elem;
Lc.length=0;
//Lc.listsize=Lc.length=La.length+Lb.length;
pc=Lc.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
Lc.listsize=LIST_INIT_SIZE;
if(!Lc.elem)exit(OVERFLOW);
pa_last=La.elem+La.length-1;
pb_last=Lb.elem+Lb.length-1;
while(pa<=pa_last&&pb<=pb_last){
if(*pa<*pb){*pc++=*pa++;Lc.length++;}
else if(*pa=*pb){*pc++=*pa++;pb++;Lc.length++;}
else{*pc++=*pb++;Lc.length++;}
}
while(pa<=pa_last){*pc++=*pa++;Lc.length++;}
while(pb<=pb_last){*pc++=*pb++;Lc.length++;}
}//MergeList_Sq

Status InitList_Sq(SqList &L){
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}

void main()
{int i;
SqList La,Lb,Lc;
InitList_Sq(La);
InitList_Sq(Lb);
printf("LA:");
Creat_Sq(La);
printf("\nLB:");
Creat_Sq(Lb);
MergeList_Sq(La,Lb,Lc);
printf("\n归并后的顺序表:");
for(i=0;i<=Lc.length-1;i++)
{
printf("%d,",Lc.elem[i]);
}
printf("\n");
}

下面关于线性表的叙述中,错误的是哪一个
答:完整题目如下 1数据结构下面关于线性表的叙述中,错误的是哪一个?A.线性表采用顺序存储,必须占用一片连续的存储单元。B.线性表采用顺序存储,便于进行插入和删除操作。C.线性表采用链接存储,不必占用一片连续的存储单元。D.线性表采用链接存储,便于插入和删除操作。答案是B.A. 顺序存储占用连续空...

一个数据结构线性表方面的题,请用C语言编出来,并能实现,望有志者帮...
答:} void prt(node *a)/*输出表*/ { node *t=a;while (t){ printf(CF,t->data );t=t->next ;} } node *init(datatype *data,int len)/*初始化表*/ { node *rt=malloc(sizeof(node));node *rc=rt;int i;rt->data=data[0];for (i=1; i<len; i++) { rt->next =m...

数据结构 算法设计题 有一个学生成绩线性表,用顺序存储方式进行存储...
答:1、用一个指示器i,从前往后找出第一个满足于60分~70分之间的学生成绩;2、再用另一个指示器j,从尾部开始,由后向前找出第一个不满足于60分~70分之间的学生成绩;3、将i,j所指元素交换一下,直到两指示器相撞,删除结束,删除的操作,利用表长来实现!也就是所有60分~70分之间的学生成绩都在...

关于数据结构中的线性表的问题
答:printf("该线性表中第%d个元素%d的后继结点是%d\n",i+1,cur_e,*next_e); flag++; } else continue; } } if(flag==0) printf("在该线性表中找不见元素%d\n",cur_e);}//返回线性表的长度int listlength_sq(sqlist *l){ return(l->length);}//在线性表L的第i个位置插入一个数据元素e。...

数据结构实验,线性表的顺序存储结构的实现编写完成下列功能的函数:(1...
答:*sizeof(int)); if(!L.elem) exit(1); L.length=0; L.listsize=LIST_INIT_SIZE ; return 1;}void Create_Sq(SqList &L,int i){ for(int j=0,j100) j--; }}bool ListInsert_Sq(SqList &L, int i,

这是数据结构线性表的一个编程题,那个高手能按要求给改动一下,谢了啊...
答:L->length++; /*线性表长度增1*/ return 1;} int DelElem(SqList *L, int i) { int j;if (i < 1 || i > L->length){ //删除时,i大于线性表的长度 return 0;} for (j = i; j < L->length; j++){ L->data[j - 1] = L->data[j];} L->length--;return 1;}...

刚学c++的数据结构线性表的一道题目.. 完全我没有思路。。
答:int a[] = 12345; // 为了方便我直接写打印后的值,其实是a[0] = 1, a[1] = 2 ... a[4] = 5 int b[] = 12;a * b 怎么算呢? 12345左移一位 = 123450 * 1 + 12345 * 2,超10进位。。。具体的算法你去写吧。最后一个提示:数组也是顺序表哦,顺序表是线性表的一种 ...

急急急 关于数据结构线性表的问题!!
答://城市结构体 struct City { char Name[100];//城市名称 Point Ps;//该城市的坐标 City *pNext;//下个结点 };//计算a,b两个坐标点之间的距离 double ComputeDistance(Point a,Point b){ return sqrt( pow((a.X - b.X),2) + pow((a.Y - b.Y),2) );} void main(void){ Cit...

已知线性表A的长度为n,并且采用顺序存储结构。写一算法,删除线性表中...
答:【答案】:(1)数据结构 采用顺序表的定义。(2)思路 为了减少移动次数,可以采用快速检索的思想,用两个变量i,j记录顺序表中被处理的两端元素的下标,开始时i=0,j=n-1,边检索第i个元素边增加i,直到找到一个元素值等于x,再边检索第j个元素边减少j,直到找到一个元素值不等于x,把下标为j的...

关于数据结构——线性表一问题
答:关于数据结构——线性表一问题 设有一个线性表(e0,e1,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为(en-1,en-2,…,e1,e... 设有一个线性表 (e0, e1, …, en-2, en-1) 存放在一个一维数组A[array...