⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlink.c

📁 1 在windows下用emacs+MinGw做的一个简单例子; 2 功能:实现了一个简单的双向链表的创建、删除和打印功能。
💻 C
字号:
#include "malloc.h"
#include "stdio.h"
#include "stdlib.h"

#define TYPE int
 struct dLinkNode
{
  TYPE  _data;
  struct dLinkNode *next;
  struct dLinkNode *prev;
}*linkList;

/*#define struct dLinkNode */

struct dLinkNode* createLinkList();
struct dLinkNode* deleteLinkList(struct dLinkNode* pList,int index);
int  printLinkList(struct dLinkNode* pList);
int clearLinkList(struct dLinkNode* pList);

int main(int argc,char*argv[])
{
struct dLinkNode *pLinkList = createLinkList();
int idx = 0;
 if(pLinkList != NULL)
     printLinkList(pLinkList);
printf("Input the index of the node you want to delete...\n");
scanf("%d",&idx);
deleteLinkList(pLinkList,idx);
printf("After deleted the %dth node ,the list is:\n",idx);
printLinkList(pLinkList);
clearLinkList(pLinkList);
return 0;
}

struct dLinkNode* createLinkList()
{
	struct dLinkNode* list = NULL;
	struct dLinkNode* newNode = NULL;
	struct dLinkNode* p = NULL;
	TYPE data = 0;
	int flag = 0;
	printf("start to create double-direction linklist,please enter some datas,end with -1...\n");
	scanf("%d",&data);
	if(data != -1)
	{
		list = (struct dLinkNode*)malloc(sizeof(struct dLinkNode*));
		list->_data = data;
		list->next = NULL;
		list->prev = NULL;
		p = list;
	}
	while(flag == 0)
	{
		scanf("%d",&data);
		if(data == -1 || list == NULL)
			break;
		newNode = (struct dLinkNode*)malloc(sizeof(struct dLinkNode*));
		newNode->_data = data;
		newNode->next =NULL;
		newNode->prev = p;
		p->next = newNode;
		p = p->next;		
	}
	return list;
}

struct dLinkNode* deleteLinkList(struct dLinkNode*pList,int index)
{
	struct dLinkNode* pOldList = pList;
	struct dLinkNode* p = pList; 	/*p record the node that will be deleted*/
	struct dLinkNode* pNext = NULL;	
	struct dLinkNode* pPrev = NULL;
	int cnt = 1;
	if(index < 1)
		return pList;
	
	while(p != NULL && cnt < index)
	{
		p = p->next;
		cnt ++;	
	}
	if(p == NULL)
		return pList;
	else
	{
		pNext = p->next;
		pPrev = p->prev;
		pPrev->next = pNext;
		pNext->prev = pPrev;	
		free(p);
		p = NULL;
	}
	return pList;
}

int printLinkList(struct dLinkNode* pList)
{
	struct dLinkNode* p = pList;
	struct dLinkNode* q = NULL;
	printf("print the link from head to tail\n");
	while(p != NULL)
	{
		q = p;
		printf("%d	",p->_data);
		p = p->next;
	}
	printf("\nprint the link from tail to head\n");
	while(q != NULL)
	{
		printf("%d	",q->_data);	
		q = q->prev;
	}
	return 0;
}

int clearLinkList(struct dLinkNode* pList)
{
	struct dLinkNode* p = pList;
	struct dLinkNode* q = p;
	while(p != NULL)
	{
		q = p->next;
		free(p);
		p = NULL;
		p = q;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -