#include/*定义结构类型和创建结点*/
typedef struct Node
{
int real;
int unreal;
struct Node* next;
}* LinkList, Node;
/*
1、创建链表
2、获得元素
3、删除链表
*/
void Creat_L(LinkList head, int n);
void Get_Elem(LinkList head, int i, int num[2]);
void Delete_ALL(LinkList head);
int main(int argc, char* argv[])
{
int n, num[2] = { 0 }, sum_r, sum_u;
LinkList head;
sum_r = sum_u = 0;
scanf_s("%d", &n);
/*创建链表*/
head = (LinkList)malloc(sizeof(Node));//创建头结点
Creat_L(head, n);
for (int i = 0; i < n; i++)
{
/*每次循环将数据域读到num中*/
Get_Elem(head, i+1, num);
/*实部相加,虚部相加*/
sum_r += num[0];
sum_u += num[1];
}
printf("%d+%di\n", sum_r, sum_u);
/*释放整个链表*/
Delete_ALL(head);
return 0;
}
```
创建链表函数——有头结点,采用尾插法创建
```c
/*创建链表,尾插法
1、定义指针r和p,r表示末尾结点p是新结点
2、令r等于头结点
3、创建新结点
4、让r的指针域指向新结点,再让指针后移
*/
void Creat_L(LinkList head, int n)
{
LinkList r, p;
r = head;
for (int i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(Node));
scanf_s("%d %d", &p->real, &p->unreal);
r->next = p;
r = p;
}
r->next = NULL;
}
```
取第i个结点上的数据
```c
/*取第i个结点上的元素
1、定义指针p和循环变量j
2、定位到第i个结点的位置
3、如果p不为空则为找到了,将元素赋给num
*/
void Get_Elem(LinkList head, int i, int num[2])
{
LinkList p;
int j = 1;
p = head -> next;//等于首结点
/*得到的p为第i个结点*/
while (p && j < i)
{
p = p->next;
j++;
}
if (p != NULL)
{
num[0] = p->real;
num[1] = p->unreal;
}
}
```
释放整个链表
```c
/*删除整个链表*/
void Delete_ALL(LinkList head)
{
LinkList p, q;
p = head->next;
while (p)
{
/*记录下一个结点*/
q = p->next;
free(p);
p = q;
}
/*将链表置为空*/
head->next = NULL;
}
```