当我将联系人添加到列表并打印出来时,我遇到了链表的问题,它打印出第一个列表两次而不是第一个和第二个列表。请让我知道我做错了什么。 感谢。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#define true 1
#define false 0
typedef int boolean;
typedef int Position;
typedef int Count;
typedef struct node_def {
int area_code;
char name[30];
char phone_number[8];
struct mode_def *next;
} Node;
typedef struct {
Position currentPos;
Count nodeCount;
Node *head;
Node *current;
Node *tail;
} ListADT;
void initList(ListADT*);
boolean checkEmpty(ListADT*);
void addList(ListADT*, int, char*, char*);
void printList(ListADT*);
int main(void) {
ListADT phoneList;
initList(&phoneList);
Node *firstNode;
addList(&phoneList, 416, "Sam", "1234567");
addList(&phoneList, 416, "Bob", "7654321");
firstNode-> next;
printList(&phoneList);
printList(&phoneList);
return 0;
}
void initList(ListADT* list){
list->currentPos = -1;
list->nodeCount = 0;
list->head = NULL;
list->tail = NULL;
}
boolean checkEmpty(ListADT* list){
return list->nodeCount == 0 ? true : false;
}
void addList(ListADT* list, int areaCode, char* name, char* phoneNum){
Node* newNode = malloc(sizeof(Node));
assert(newNode);
newNode->area_code = areaCode;
strcpy(newNode->name, name);
strcpy(newNode->phone_number, phoneNum);
newNode->next = NULL;
if(list->nodeCount == 0) {
list->head = newNode;
list->tail = newNode;
list->currentPos = 0;
list->nodeCount = 1;
}
else {
list->tail = newNode;
list->current = list->tail;
list->nodeCount++;
list->currentPos = list->nodeCount -1;
}
}
void printList(ListADT* list){
if(!checkEmpty(list)){
Node* newNode = list->head;
printf("The name is %s\n",newNode->name);
printf("The phone number is %i-%s\n",newNode->area_code,newNode->phone_number);
}else
printf("The list is empty.\n");
}
答案 0 :(得分:1)
意味着没有坏处,但根据您对当前代码的问题,我想在编写自己的抽象数据类型之前,您必须获得更多的编程经验,特别是在C ++编程方面。 有很多事情只做了一半,实际上你问“为什么我的功能,除了打印完全第一个元素之外别无其他,如果我将这个函数调用两次,则打印相同的元素两次。”。< / p>
无论如何,一些提示:
struct mode_def *next
中的错字,应为struct node_def *next
。next
实际设置在某处,例如else {
list->tail->next = newNode
;否则你将无法获得链接列表但未链接的节点next
遍历节点,即while(node!=NULL) { ...; node=node->next; }
firstNode-> next;
什么都不做