?? dlink.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 + -