以前给别人做的一个链表,给你用功能富裕了你看看吧:
#include "stdio.h"
struct Node
{
Node *pNext;
int value;
}*pTop;
struct Node* Insert(struct Node *pNode,int Num);
void Del(struct Node *pDelNode);
struct Node* Search(struct Node *pNode,int Num);
void main()
{
pTop=NULL;
int i,k,x,y;
struct Node *pCurrentNode,*pTempNode;
/*(1)建立带表头结点的单链表;*/
for(i=0;i<30;i++) Insert(NULL,i);/*建立一个有30个结点的链表*/
/*(2)输出单链表中所有结点的数据域值;*/
pCurrentNode=pTop;
while(pCurrentNode!=NULL)
{
printf("%d->",pCurrentNode->value);/*遍历这个链表并输出其各结点的数据域*/
pCurrentNode=pCurrentNode->pNext;
}
/*(3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y;*/
printf("Input x,y");
scanf("%d,%d",&x,&y);
pCurrentNode=Search(NULL,x);
Insert(pCurrentNode,y);
/*(4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。 */
printf("Input k");
scanf("%d",&k);
pCurrentNode=pTop;
i=0;
while(1)
{
pTempNode=Search(pCurrentNode,x);
if(pTempNode!=NULL)
{
pCurrentNode=pTempNode->pNext;
Del(pTempNode);
i++;
}
else break;
}
printf("%d Nodes was deleted",i);
pTempNode=pTop;
while(pTop!=NULL)
{
pTop=pTempNode->pNext;
delete pTempNode;
}
}
Node* Insert(struct Node *pNode,int Num)
{
struct Node *pNewNode;
pNewNode=new Node;
pNewNode->value=Num;
if(pNode==NULL)/*无确定插入位置时将结点放在链表最后*/
{
if(pTop!=NULL)/*确定链表是否是空表*/
{
pNode=pTop;
while(pNode->pNext!=NULL) pNode=pNode->pNext;/*找到尾结点*/
pNode->pNext=pNewNode;
}
else
{
pTop=pNewNode;
}
pNewNode->pNext=NULL;
}
else/*有确定插入位置时将结点放在指定结点之后*/
{
pNewNode->pNext=pNode->pNext;
pNode->pNext=pNewNode;
}
return pNewNode;
}
void Del(struct Node *pDelNode)
{
if(pDelNode==NULL || pTop==NULL) return;/*防错处理*/
struct Node *pNode;
pNode=pTop;
while(pNode!=NULL && pNode->pNext!=pDelNode) pNode=pNode->pNext;/*找到指定结点的前导结点*/
if(pNode!=NULL)
{
pNode->pNext=pDelNode->pNext;
delete pDelNode;
}
}
struct Node* Search(struct Node *pNode,int Num)
{
struct Node *pSeaNode;
if(pNode==NULL) pSeaNode=pTop;/*不指定搜索的起始位置,从表头开始*/
else pSeaNode=pNode;/*指定了搜索的起始位置,从指定位置开始*/
while(pSeaNode!=NULL && pSeaNode->value!=Num) pSeaNode=pSeaNode->pNext;
return pSeaNode;/*没有找到结点时返回空指针*/
}
楼上的程序实在是太强了,能做我师付吗?