c语言线性表程序问题

c语言线性表程序问题,第1张

typedef struct sxb{int data[10];

int len;}seqlist;

typedef struct node{int data;

struct node next;}listnode;

typedef struct sxb{int data[10];

int len;};seqlist

typedef struct node{int data;

struct node next;};listnode

1 顺序表:

要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。算法如下:

// 表结构定义同上

void ReverseList( Seqlist L)

{

Datatype t ; //设置临时空间用于存放data

int i;

for ( i=0 ; i < L->length/2 ; i++)

{ t = L->data[i];//交换数据

L -> data[ i ] = L -> data[ L -> length - 1 - i ] ;

L -> data[ L -> length - 1 - i ] = t ;

}

}

2 链表

也是可以用交换数据的方式来达到逆置的目的,但是由于是单链表,数据的存取不是随机的,因此算法效率太低,我们可以利用指针的指向转换来达到表逆置的目的。算法是这样的:

// 结构定义略

LinkList ReverseList( LinkList head )

{

// 将head 所指的单链表逆置

ListNode p ,q ;//设置两个临时指针变量

if( head->next && head->next->next)

{

//当链表不是空表或单结点时

p=head->next;

q=p->next;

p -> next=NULL;//将开始结点变成终端结点

while (q)

{//每次循环将后一个结点变成开始结点

p=q;

q=q->next ;

p->next = head-> next ;

head->next = p;

}

return head;

}

return head;//如是空表或单结点表,直接返回head

}

楼上的代码胡弄洋鬼子呢,也没实现逆置,只是逆向输出了一下!

#include<stdioh>

#include<stdlibh>

#define MAXSIZE 100

typedef struct{

int data[MAXSIZE];

int length;

}SeqList;

//初始化

SeqList InitList(){

SeqList L;

Llength=0;

return L;

}

//插入元素

SeqList Insert(SeqList &L,int x){

if(Llength==MAXSIZE){

printf("表满");

exit(0);

}

Llength++;

Ldata[Llength]=x;

return L;

}

//删除第i个元素

SeqList Delete(SeqList &L,int i){

if(i<1||i>Llength){

printf("不存在第%d个元素",i);

exit(0);

}

int j;

for(j=i;j<=Llength-1;j++){

Ldata[j]=Ldata[j+1];

}

Llength--;

return L;

}

//定位某个元素

int locate(SeqList L,int x){

int i;

i=1;

while(i<=Llength&&Ldata[i]!=x){

i++;

}

if(i<=Llength)

return i;

else

return 0;

}

SeqList Bingji(SeqList La,SeqList Lb,SeqList Lc){

int i,j;

for(i=1;i<=Lalength;i++){

for(j=1;j<=Lalength;j++){

if(Ladata[i]==Lbdata[j]){

Lc=Insert(Lc,Ladata[i]);

}

}

}

return Lc;

}

//打印数组

void Display(SeqList L){

int i;

for(i=1;i<=Llength;i++){

printf(" %d ",Ldata[i]);

}

printf("\n");

}

这个是基于数组的线性表,有插入和删除的 *** 作,如有不懂可追问。

线性表包括两种

一种是顺序表一种是链表

第一种楼主应该知道我就不说了

第二种如下例子:

要用的时候稍微改一下就可以了

#include <iostream>

using namespace std;

typedef struct node{

int items;//项目编号 1为50米 2为100米 3为200米

int sex; //男性代号为0 女性代号为1

int department;//院系编号 1为计算机与电子系 2为信息科学与技术系 3

float score;//得分

struct node next;

}lnode,linklist;

linklist creat()

{

int t,i;

cout<<"本次需要输入几个人的数据"<<endl;

cin>>t;

lnode p1,p2,head;

head=new lnode;

head->next=NULL;

p1=head;

for(i=1;i<=t;i++)

{

p2=new lnode;

cout<<"输入第"<<i<<"个人的 性别 得分 项目 院系"<<endl;

cin>>(p2->sex)>>(p2->score)>>(p2->items)>>(p2->department);

p1->next=p2;

p2->next=NULL;

p1=p1->next;

}

return head;

}

以上就是关于c语言线性表程序问题全部的内容,包括:c语言线性表程序问题、线性表的就地逆置的程序代码怎么写、程序定义一个完整的线性表,实现 插入和删除的算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9970176.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存