网络图中顶点的插入与删除算法用C++怎么实现

网络图中顶点的插入与删除算法用C++怎么实现,第1张

如果是用图的邻接矩阵存储的话数组足够大,直接在二维数组的末端插入一行数据,譬如已有i-1个结点,插入a【i】【】行数据,就是把和这个结点有连接的边置1,比如i和i-2有连接,a【i】【i-2】=1,如果是有向图的话,也一样,只需读入有连接边的顶点的编号,注意顶点的顺序

都是些小问题

注意输入时,中间不能有空格,如输入:12345回车0,输出:12045

已改(后面有注释):

#include <stdio.h>

#include <stdlib.h>

#define MaxSize 50

typedef char ElemType

typedef struct

{ ElemType elem[MaxSize]

int length

}SqList

SqList *InitList(void)

{

SqList *L = NULL

L = (SqList *) malloc (sizeof(SqList))

L->length = 0

return L

}

void DispList(SqList *L)

{

int i

if (L->length == 0)

{

return

}

for (i=0i<L->lengthi++)

{

printf("%c", L->elem[i])

}

printf("\n")

}

void ListInsert(SqList * L, int i, ElemType e)

{

int j

if ((i <1) || (i >L->length))

{

return

}

i--

for (j=L->lengthj>ij--)

{

L->elem[j] = L->elem[j-1]

}

L->elem[i] = e

L->length++

}

void ListDelete(SqList * L, int i)

{

int j

if ((i <1) || (i >L->length))

{

return

}

i--

for (j=ij<L->length-1j++)

{

L->elem[j] = L->elem[j+1]

}

L->length--

}

int main(void)

{

SqList *L = NULL

int i

char f

L = InitList()//去掉&L,加上L =

printf("Please enter char:\n")

for(i=0i<5i++)

{

scanf("%c",&(L->elem[L->length++]))

}

fflush(stdin)//防止回车字符被下个scanf吃掉

printf("\n")

printf("Please a enter char:\n")

scanf("%c",&f)

ListInsert(L,4,f)

printf("\n")

ListDelete(L,3)

DispList(L)

}

#include<stdio.h>

#include<stdlib.h>

#define MAXSIZE 100

typedef struct{

int data[MAXSIZE]

int length

}SeqList

//初始化

SeqList InitList(){

SeqList L

L.length=0

return L

}

//插入元素

SeqList Insert(SeqList &L,int x){

if(L.length==MAXSIZE){

printf("表满")

exit(0)

}

L.length++

L.data[L.length]=x

return L

}

//删除第i个元素

SeqList Delete(SeqList &L,int i){

if(i<1||i>L.length){

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

exit(0)

}

int j

for(j=ij<=L.length-1j++){

L.data[j]=L.data[j+1]

}

L.length--

return L

}

//定位某个元素

int locate(SeqList L,int x){

int i

i=1

while(i<=L.length&&L.data[i]!=x){

i++

}

if(i<=L.length)

return i

else

return 0

}

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

int i,j

for(i=1i<=La.lengthi++){

for(j=1j<=La.lengthj++){

if(La.data[i]==Lb.data[j]){

Lc=Insert(Lc,La.data[i])

}

}

}

return Lc

}

//打印数组

void Display(SeqList L){

int i

for(i=1i<=L.lengthi++){

printf(" %d ",L.data[i])

}

printf("\n")

}

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


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

原文地址: http://outofmemory.cn/yw/12001259.html

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

发表评论

登录后才能评论

评论列表(0条)

保存