c语言指针链表投票选人
时间: 2023-09-10 10:11:03 浏览: 81
好的,那我可以为您解释一下如何用 C 语言的指针链表来实现投票选人的功能。
首先,我们需要定义一个结构体来表示每个候选人的信息,包括姓名和得票数。定义如下:
```c
struct candidate {
char name[20];
int votes;
};
```
然后,我们可以定义一个指针链表来存储所有候选人的信息。每个节点包含一个指向候选人结构体的指针和一个指向下一个节点的指针。定义如下:
```c
struct node {
struct candidate *data;
struct node *next;
};
```
接下来,我们可以实现一些基本的操作,例如创建一个新节点、添加节点到链表中、从链表中删除节点等等。这些操作可以通过指针操作来完成。示例代码如下:
```c
// 创建一个新节点
struct node *new_node(struct candidate *data) {
struct node *new = malloc(sizeof(struct node));
new->data = data;
new->next = NULL;
return new;
}
// 添加节点到链表中
void add_node(struct node **head, struct node *new) {
if (*head == NULL) {
*head = new;
} else {
struct node *current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = new;
}
}
// 从链表中删除节点
void remove_node(struct node **head, struct candidate *data) {
struct node *current = *head;
struct node *prev = NULL;
while (current != NULL && current->data != data) {
prev = current;
current = current->next;
}
if (current != NULL) {
if (prev != NULL) {
prev->next = current->next;
} else {
*head = current->next;
}
free(current);
}
}
```
最后,我们可以编写一个简单的程序来实现投票选人的功能。程序可以读取用户输入的候选人姓名,然后在链表中查找该候选人并将其得票数加一。如果该候选人不存在,则创建一个新的节点并添加到链表中。示例代码如下:
```c
int main() {
struct node *head = NULL;
char name[20];
while (1) {
printf("请输入候选人姓名(输入 q 结束):");
scanf("%s", name);
if (strcmp(name, "q") == 0) {
break;
}
struct candidate *data = NULL;
struct node *current = head;
while (current != NULL && strcmp(current->data->name, name) != 0) {
current = current->next;
}
if (current != NULL) {
current->data->votes++;
} else {
data = malloc(sizeof(struct candidate));
strcpy(data->name, name);
data->votes = 1;
add_node(&head, new_node(data));
}
}
printf("投票结果:\n");
struct node *current = head;
while (current != NULL) {
printf("%s: %d 票\n", current->data->name, current->data->votes);
current = current->next;
}
return 0;
}
```
以上就是一个简单的用 C 语言指针链表实现投票选人的例子。希望对您有帮助!
阅读全文