typedefstruct中间无空格
时间: 2023-05-04 21:06:43 浏览: 102
typedef struct是C语言中的关键字,用于定义新的自定义数据类型。其作用就是将由结构体定义的数据类型定义成一个新的类型名,方便在程序中调用。在这个关键字里,typedef和struct之间是不能有空格的,否则会报错。
在使用typedef struct时,我们需要先定义一个结构体,然后使用typedef将其定义成一个新的类型名。例如:
typedef struct student {
char name[20];
int age;
} Student;
以上这个例子定义了一个名为student的结构体,其中有两个成员变量name和age。然后我们使用typedef将student定义成了一个新的类型名Student,以便在程序中更方便地使用。
同时,typedef struct还可以用于定义指向结构体的指针类型。例如:
typedef struct student {
char name[20];
int age;
} Student, *StudentPtr;
以上这个例子定义了一个名为student的结构体,并使用typedef将其定义成了一个新的类型名Student,同时也定义了一个指向结构体Student的指针类型StudentPtr。
总之,typedef struct是C语言中非常常用的关键字,使用时要注意不要中间加空格。
相关问题
输入 多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表新插入的顶点编号。当n和m都等于0时,输入结束。 输出 每组数据输出n+1行。为增加顶点后的邻接表。每两个数字之间用空格隔开给定一个无向图,在此无向图中增加一个新顶点,完善下列代码 #include<iostream> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MVNum 100 //最大顶点数 using namespace std; typedef struct ArcNode {//边结点 int adjvex; //邻接点域:该边所指向的顶点的位置 int data; //数据域:存储和边相关的信息 struct ArcNode* nextarc; //链域:指向下一条边的指针 }ArcNode; typedef struct VNode {//顶点信息 int data; //顶点结点的数据域 ArcNode *firstarc; //链域:指向第一条依附该顶点的边的指针 }VNode,AdjList[MVNum]; //AdjList表示邻接表类型 typedef struct {//邻接表 AdjList vertices; int vexnum,arcnum; //图的当前顶点数和边数 }ALGragh; int CreateUDG(ALGragh &G,int vexnum,int arcnum) {//采用邻接表表示法,创建无向图G } int InsertVex(ALGragh &G) {//在以邻接表形式存储的无向图G上插入顶点v } int PrintGraph(ALGragh G) {//输出图G }
这是一道关于图的基本操作的题目,主要涉及到邻接表的创建和顶点的插入操作。
首先,我们需要定义邻接表数据结构,包括边结点和顶点结点。边结点存储指向的顶点位置、边相关的信息以及指向下一条边的指针;顶点结点存储顶点的数据以及指向第一条依附该顶点的边的指针。
```cpp
typedef struct ArcNode {
int adjvex; //邻接点域:该边所指向的顶点的位置
int data; //数据域:存储和边相关的信息
struct ArcNode* nextarc; //链域:指向下一条边的指针
} ArcNode;
typedef struct VNode {
int data; //顶点结点的数据域
ArcNode *firstarc; //链域:指向第一条依附该顶点的边的指针
} VNode, AdjList[MVNum]; //AdjList表示邻接表类型
```
接着,我们定义邻接表图的数据结构,包括邻接表数组、图的当前顶点数和边数。
```cpp
typedef struct {
AdjList vertices; //邻接表
int vexnum, arcnum; //图的当前顶点数和边数
} ALGragh;
```
然后,我们需要完成创建无向图的函数 `CreateUDG`,它采用邻接表表示法,根据输入数据创建一个无向图。具体实现可以使用循环遍历输入的边数据,将每条边插入到对应两个顶点的邻接表中。
```cpp
int CreateUDG(ALGragh &G, int vexnum, int arcnum) {
G.vexnum = vexnum;
G.arcnum = arcnum;
for (int i = 1; i <= vexnum; i++) {
G.vertices[i].data = i; //顶点数据初始化
G.vertices[i].firstarc = NULL; //边链表初始化
}
for (int i = 1; i <= arcnum; i++) {
int h, k;
cin >> h >> k;
//构造边结点
ArcNode* p = new ArcNode;
p->adjvex = k;
p->data = 0; //边的数据域可以先不管,后面插入顶点时再更新
p->nextarc = G.vertices[h].firstarc;
G.vertices[h].firstarc = p;
//由于是无向图,需要插入反向边
ArcNode* q = new ArcNode;
q->adjvex = h;
q->data = 0;
q->nextarc = G.vertices[k].firstarc;
G.vertices[k].firstarc = q;
}
return OK;
}
```
接着,我们需要完成插入顶点的函数 `InsertVex`,它在以邻接表形式存储的无向图G上插入顶点v,并将其插入到原图中任意一条边的中间,即在该边所在的顶点的邻接表中插入一条新的边。
具体实现可以先创建一个新的顶点结点,并将其插入到邻接表的数组末尾,然后再在输入的新顶点v要插入的边的两个顶点的邻接表中插入新的边结点。最后,更新图的顶点数和边数即可。
```cpp
int InsertVex(ALGragh &G, int v) {
G.vexnum++;
//构造新的顶点结点
VNode new_v;
new_v.data = v;
new_v.firstarc = NULL;
G.vertices[G.vexnum] = new_v;
int f;
cin >> f;
//找到要插入的边的两个端点
int h, k;
for (int i = 1; i <= G.vexnum - 1; i++) {
if (G.vertices[i].data == f) {
h = i;
}
if (G.vertices[i].data == v) {
k = i;
}
}
//构造新的边结点
ArcNode* p = new ArcNode;
p->adjvex = k;
p->data = 0;
p->nextarc = G.vertices[h].firstarc;
G.vertices[h].firstarc = p;
//由于是无向图,需要插入反向边
ArcNode* q = new ArcNode;
q->adjvex = h;
q->data = 0;
q->nextarc = G.vertices[k].firstarc;
G.vertices[k].firstarc = q;
G.arcnum++;
return OK;
}
```
最后,我们需要完成输出图的函数 `PrintGraph`,它遍历邻接表数组,输出每个顶点的数据以及与之相连的所有顶点。
```cpp
int PrintGraph(ALGragh G) {
for (int i = 1; i <= G.vexnum; i++) {
cout << G.vertices[i].data << " ";
ArcNode* p = G.vertices[i].firstarc;
while (p) {
cout << G.vertices[p->adjvex].data << " ";
p = p->nextarc;
}
cout << endl;
}
return OK;
}
```
最后,我们将上述函数整合起来,完成主程序的编写,读入多组数据,对于每一组数据,先创建无向图,然后插入新的顶点,最后输出增加顶点后的邻接表。
```cpp
int main() {
int n, m;
while (cin >> n >> m && n != 0 && m != 0) {
ALGragh G;
CreateUDG(G, n, m);
int v;
cin >> v;
InsertVex(G, v);
PrintGraph(G);
}
return 0;
}
```
下列算法的功能为:采用折半方法进行关键字的查找,请将算法中缺失的语句按照顺序填入对应的空格。 结构定义: typedef int KeyType; typedef struct{ KeyType key; }ElemType; typedef struct { ElemType *elem; int length; } SSTable; 折半查找算法: int Search_Bin(SSTable &ST,KeyType key){ //在有序表ST中折半查找其关键字等于key的数据元素 //若找到,则函数值为该元素在表中的位置,否则为0 int low=1, high=ST.length,mid; while(low<=high){ ; // (1) if(EQ(key, )) // (2) return mid; else if(LT(key,ST.elem[mid].key)) ; // (3) else ; // (4) } return 0; }
折半查找算法:
int Search_Bin(SSTable &ST,KeyType key){
//在有序表ST中折半查找其关键字等于key的数据元素
//若找到,则函数值为该元素在表中的位置,否则为0
int low=1, high=ST.length,mid;
while(low<=high){
mid = (low+high)/2; // (1) 折半计算中间位置
if(EQ(key, ST.elem[mid].key)) // (2) 关键字与中间位置元素相等
return mid;
else if(LT(key,ST.elem[mid].key)) // (3) 关键字小于中间位置元素
high = mid-1;
else // (4) 关键字大于中间位置元素
low = mid+1;
}
return 0;
}
阅读全文