1.线性表
1.1 确定单链表是否有线性结构的方法只能进行是否有环状结构,无法确定入口点在哪里,确定入口点的方法
1.将该单链表转换为 Y型链表 ,这样即可按照 Y型链表 的方法来确定入口点;
2.获得环的长度k,再通过两个指针间隔k个来寻找入口点;
// ============================================代码未完成============================================
2.栈和队列
2.1 栈也可称为 FILO
2.2 网页中的后退键就用到了 栈 的思想
2.3 关于栈有8个基本函数
1.push
2.pop
3.init
4.clear
5.gettop
6.getcount
7.isempty
8.destroy
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int nValue;
struct node *pNext;
}Node;
typedef struct stack
{
Node *pTop;
int nCount;
}Stack;
void s_Init(Stack **pStack)
{
*pStack = (Stack*)malloc(sizeof(Stack));
(*pStack)->pTop = NULL;
(*pStack)->nCount = 0;
}
void s_Push(Stack *pStack,int nNum)
{
if(pStack == NULL)
{
printf("栈不存在\n");
return;
}
Node *pTemp = NULL;
pTemp = (Node*)malloc(sizeof(Node));
pTemp->nValue = nNum;
pTemp->pNext = pStack->pTop;
pStack->pTop = pTemp;
pStack->nCount++;
}
int s_Pop(Stack *pStack)
{
if(pStack == NULL || pStack->nCount == 0)
{
printf("错误\n");
return -1;
}
int nNum;
Node *pDel = NULL;
pDel = pStack->pTop;
nNum = pDel->nValue;
pStack->pTop = pStack->pTop->pNext;
free(pDel);
pDel = NULL;
pStack->nCount--;
return nNum;
}
void s_Clear(Stack *pStack)
{
if(pStack == NULL)return;
while(pStack->nCount != 0)
{
s_Pop(pStack);
}
}
void s_Destroy(Stack **pStack)
{
s_Clear(*pStack);
free(*pStack);
*pStack = NULL;
}
Node *s_GetTop(Stack *pStack)
{
if(pStack == NULL)exit(1);
return pStack->pTop;
}
int s_GetCount(Stack *pStack)
{
if(pStack == NULL)exit(1);
return pStack->nCount;
}
int s_IsEmpty(Stack *pStack)
{
if(pStack == NULL)exit(1);
return pStack->nCount == 0 ?1:0;
}
int main()
{
Stack *pStack = NULL;
s_Init(&pStack);
s_Push(pStack,1);
s_Push(pStack,2);
s_Push(pStack,3);
s_Push(pStack,4);
printf("%d\n",s_Pop(pStack));
printf("%d\n",s_Pop(pStack));
printf("%d\n",s_Pop(pStack));
printf("%d\n",s_Pop(pStack));
s_Destroy(&pStack);
s_Push(pStack,100);
return 0;
}