首先在此贴出代码
#include<stdio.h>
#include<malloc.h>
typedef struct LinkNode
{
char data;
struct LinkNode *next
}LNode,*LinkList,*NodePtr;
LinkList initLinkList()
{
NodePtr tempHeader = (NodePtr)malloc(sizeof(LNode));
tempHeader->data = '\0';
tempHeader->next = NULL;
return tempHeader;
}//tH complete
void printList(NodePtr paraHeader)
{
NodePtr p = paraHeader->next;
while (p != NULL)
{
printf("%c",p->data);
p = p->next;
}
printf("\r\n");
}//print list complete
void appendElement(NodePtr paraHeader, char paraChar)
{
NodePtr p, q;
q = (NodePtr)malloc(sizeof(LNode));
q->data = paraChar;
q->next = NULL;
p = paraChar;
while (p->next != NULL)
{
p = p->next;
}
p->next = q;
}//add complete
void insertElement(NodePtr paraHeader, char paraChar, int paraPOsition)
{
NodePtr p,q;
p = paraHeader;
for (int i = 0; i , paraPOsition; i++)
{
p = p->next;
if (p == NULL)
{
printf("The position %d is beyond the list", paraPOsition);
return;
}
}
q = (NodePtr)malloc(sizeof(LNode));
q->data = paraChar;
printf("linking\r\n");
q->next = p->next;
p->next = q;
}//insert complete
void deleteElement(NodePtr paraHeader, char paraChar)
{
NodePtr p,q;
p = paraHeader;
while((p->next != NULL) && (p->next->data != paraChar))
{
p =p->next;
}
if (p->next == NULL)
{
printf("Delete %c Error\r\n",paraChar);
return;
}
q = p->next;
p->next = p->next->next;
free(q);
}//delete complete
void appendInsertDeleteTest()
{
LinkList tempList = initLinkList();
printList(tempList);
appendElement(tempList,'H');
appendElement(tempList,'e');
appendElement(tempList,'l');
appendElement(tempList,'l');
appendElement(tempList,'l');
appendElement(tempList,'o');
appendElement(tempList,'!');
printList(tempList);
deleteElement(tempList,'e');
deleteElement(tempList,'a');
deleteElement(tempList,'o');
printList(tempList);
insertElement(tempList,'o',1);
printList(tempList);
}//Test complete
void basicAddressTest()
{
LNode tempNodel, tempNode2;
tempNodel.data = 4;
tempNode2.data = NULL;
printf("The first node is: %d %d %d\r\n",&tempNodel,&tempNodel.data,&tempNodel.next);
printf("The second node is: %d %d %d\r\n",&tempNode2,&tempNode2.data,&tempNode2.next);
tempNodel.next = &tempNode2;
}//Addresstest complete
int main()
{
appendInsertDeleteTest();
}
代码中首先进行定义结构体,头指针等常规操作。
然后定义了printList函数用于输出表信息。appendElemnet函数用于添加元素,insertElement函数用于插入元素,deleteElement函数用于删除元素。
至此,单链表基本完成。同时写了appendInsertDeleteTest函数用于测试前面的函数是否正常运行,大致是通过函数添加H,e,l,l,o,!几个字符并输出,然后删除e,a(不存在),o,并输出。然后插入字符o再输出。如果输出结构符合预期,则测试通过
下面粘贴运行结果
糟糕,出现了奇怪的报错。通过排查,认为是定义结构体时出现的问题,即第一条报错。
可是还是解决不了报错