Linux与数据结构 2019-3-9 下午

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42896619/article/details/88431037