//1、使用结构体创建一个结点,结点内容包括一个指向下一个结点的指针和一个char类型的数据
//2、使用一个字符数组创建单链表
//3、从头遍历单链表,设置一个计数器count,count代表当前元素的下标
// 1)、当前元素不是要查找的字符时,指针指向下一个结点,并且计数器count加一
// 2)、如果当前元素是要查找的字符,则返回计数器count
// 3)、如果单链表中没有所查找的字符,则直接返回-1
typedef struct SListNode{
char _data; //char类型的数据
struct SListNode* _next;//指向下一个结点的指针
}Node, *pNode;
pNode BuyNewNode(char c) //创建一个新结点
{
pNode NewNode = (pNode)malloc(sizeof(Node));
assert(NewNode);
NewNode->_data = c;
NewNode->_next = NULL;
return NewNode;
}
pNode CreateList(char array[], int len)//使用一个字符数组创建单链表
{
int i = 0;
pNode pHead = NULL;
pHead = BuyNewNode(array[0]);
pNode cur = pHead;
for (i = 1; i < len; i++)
{
pHead->_next = BuyNewNode(array[i]);
pHead = pHead->_next;
}
return cur;
}
//下标:已经遍历过的结点个数
int Find(pNode pHead, char k)//从头遍历单链表,设置一个计数器count,count代表当前元素的下标
{
pNode cur = pHead;
int count = 0;
while (cur != NULL)
{
if (cur->_data == k) //如果当前结点的字符是要查找的字符,则返回下标count
return count;
cur = cur->_next;
count++; //如果当前元素不是要查找的字符,则下标count+1,同时结点往后走
}
return -1; //如果单链表中没有所查找的字符,则直接返回-1
}
int main()
{
int tmp = 0;
char array[10] = { 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 's', 'f' };
pNode pHead = CreateList(array, sizeof(array) / sizeof(array[0]));
tmp = Find(pHead, 'c');
if (tmp >= 0)
{
printf("%d\n", tmp);
}
else
{
printf("字符不存在!");
}
}
