#include <stdio.h> #include <stdlib.h> typedef struct lllll//链表结点结构体 { int data; struct lllll* next; }link; link* head()//头节点创造 { link*head=malloc(sizeof(link)); head->next=head; return head; } link* creat(int x)//结点创造 { link*new=malloc(sizeof(link)); new->data=x; new->next=NULL; return new; } void tocha(link*phead,int x)//头插式插入 { if(phead==NULL) return; link*p=creat(x); phead->next=p; p->next=phead; } void jh(link*phead)//交换前两个结点和后两个结点 { if(phead==NULL) return; link*p=phead->next; link*q=p->next; phead->next=q;//交换第1,2个结点 p->next=q->next; q->next=p; link*o=phead; while(p->next!=phead)//三个指针指到最后三位 { o=q; q=p; p=p->next; } o->next=p;//交换最后两位 q->next=p->next; p->next=q; } void dayin(link *phead)//打印链表 { if(phead==NULL) return; link*p=phead->next; while(p->next!=phead) { printf("%d",p->data); p=p->next; } } int main() { int n;//输入一个n位的数组,其值由键盘输入 scanf("%d",&n); int a[n]; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } link*phead=head();//头指针指向头结点 for(int i=n-1;i>=0;i--) { tocha(phead,a[i]); } printf("%d->",(phead->next)->data); dayin(phead); }
时间: 2024-04-08 19:32:01 浏览: 68
这段代码是一个简单的链表操作,实现了表的创建、插入交换操作,最打印出链表的内容。具的操作步骤如下:
1. 首定义了一个链表结的结构体 ``,包含一个整型数据员 `data` 和指向下一个结的指针成员 ``。
2. 定了一个 `head()` 函数用于创建头结,并返回头结点的针。
3. 定义了一个 `()` 函数,用于创建新的结点将传入的参数作为结点数据,并返回新结点的指针。
. 定义了一个 `cha()` 函数,用在头部插入结。函数接受两个参数,第一个参数头结点的指针,第二个参数是要插入的数据。函数会创建一个新结点,并将其插入到头结点面。
5. 定义了一个 `jh()` 函数,用于交换链表中的两个结点和后两个结点。函数接受一个参数,即头点的指针。函数会先交换第一个和第二个结点,然后找到最后两个结点并交换它们。
6. 定义了一个 `dayin()` 函数,用于打印链表的内容。函数接受一个参数,即头结点的指针。函数会遍历链表,并打印每个结点的数据。
7. 在 `main()` 函数中,首先从键盘输入一个整数 `n`,表示数组的长度。然后创建一个长度为 `n` 的整型数组 `a`,并从键盘输入数组的值。
8. 创建头结点,并将数组中的元素逆序插入到链表中。
9. 打印链表的第一个元素,并调用 `dayin()` 函数打印链表的内容。
注意:为了使程序正常运行,你需要在代码开头包含 `<stdio.h>` 和 `<stdlib.h>` 头文件。
相关问题
简化#include<stdio.h> #include<stdlib.h> //定义数据类型,假设为int typedef int ElemType; //定义自引用结构体(结点) struct node { ElemType data; struct node *next; }; //typedef为了简写struct node typedef struct node Node; /** * 链表各种函数的声明 */ //创建链表函数声明 Node *CreatList(); /
下面是简化后的代码:
```
typedef int ElemType;
typedef struct node {
ElemType data;
struct node *next;
} Node;
Node *CreatList();
```
优化这段代码#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<conio.h> #define OK 1 #define error 0 #define MVNum 100 #define MAXSIZE 10 typedef int OtherInfo,QElemtype; typedef char VerTexType; //结构体定义 typedef struct ArcNode{ int adjvex;
首先,该段代码中包含了一些不必要的头文件,例如:conio.h,malloc.h等。建议只保留stdio.h和stdlib.h。
其次,可以将#define OK 1和#define error 0替换为枚举类型,使代码更加清晰易读。
最后,在结构体定义中,可以将OtherInfo和QElemtype合并为一个类型,避免定义过多类型。同时,也可以将结构体中的变量类型进行优化,例如将int类型的adjvex改为short或者char类型。
重构后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
#define MAX_ARC_NUM 10
typedef enum {
ERROR = 0,
OK = 1
} Status;
typedef char VertexType;
typedef int ArcType;
typedef struct ArcNode {
int adjvex;
struct ArcNode* nextarc;
ArcType* info;
} ArcNode;
typedef struct VNode {
VertexType data;
ArcNode* firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
} ALGraph;
```
希望可以帮到你。
阅读全文