标签:
#include <stdio.h>
#include "shou_note.h"
struct student *create() /*这个括号是什么意思?*/
{
//创建 头指针 尾指针 新指针
struct student *phead=NULL;
struct student *pend =NULL;
struct student *pnew =NULL;
int i=0; //循环变量
//建立链表及第一个结点
//因为第一个结点是头结点,所以要放在循环外面处理
pnew=(struct student*)malloc(sizeof(struct student));
scanf("%s%d",phead->name,phead->age);
phead=pnew=pend;/*现在只有一个结点,同时为三个结点*/
//建立后面三个结点
for(i=1;i<4;i++){
pnew=(struct student*)malloc(sizeof(struct student));
scanf("%s%d",phead->name,phead->age);
pend->next=pnew;
pend=pnew;
}
pend->next=NULL;
return phead;
}
//输出结点
void print(struct student *phead){
struct student *p; //建立临时指针
p=phead; //便临时指向头结点
while (p!=NULL) {
printf("姓名:%s 年龄:%d\n",p->name,p->age);
p=p->next;
}
}
//函数:void del 删除指定姓名结点
//参数:struct student *phead,char *name
//返回值:void
void del(struct student *phead,char *name){
//为了简化程序,本函数有一个缺陷:无法删除第一个结点
struct student *pfront=NULL;
struct student *pback =NULL;
pback=phead;
pfront=pback->next;
while (pfront!=NULL) {
if (strcmp(name, pfront->name)==0) //找到名字开始删除
{
//下面进行pfront指向的函数进行删除
pback->next=pfront->next;
free(pfront);
return;
}
pback=pfront;
pfront=pfront->next;
}
printf("要删除的名字未找到.");
}
//插入一个结点在指定姓名之前
void insert(struct student *phead,char *name){
//为了简化结点,本函数有一个缺陷,无法在第一个函数之前插入节点.
struct student *pfront=NULL;
struct student *pback =NULL;
struct student *pnew =NULL;
//前结点 后结点 新结点
//与删除操作不同的是插入结点要插入新的结点
printf("请输入新节点的姓名和年龄:\n");
scanf("%s%d",pnew->name,pnew->age);
pback=phead; //后结点指向头结点
pfront=phead->next; //前结点指向头结点的下一个节点
while (pfront!=NULL) {
if (strcmp(name, pfront->name)==0)//找到名字,开始插入
{
pback->next=pnew; //使后结点的下一结点指向新结点
pnew->next=pfront; //新结点的下一节点指向前结点
return;
}
pback=pfront; //后结点设为前结点
pfront=pfront->next; //前结点又指向下一结点使前后结点始终保留一个空隙
}
//如果未找到要插入的结点,将新结点插在链表的最后一个
pback->next=pnew;
pnew->next=NULL;
}
#include <stdio.h>
#include "shou_note.h"
#include "shou_note.c"
int main(int argc, const char * argv[]) {
struct student *phead=NULL; //链表头指针
phead=create(); //创建结点
print(phead); //输出所有结点
del(phead, "cc"); //删除名为cc的结点
printf("删除节点后的情况:");
print(phead);
insert(phead,"dd"); //在名为dd结点之前插入一个新结点
printf("插入节点后的借点情况:");
print(phead);
return 0;
}
标签:
原文地址:http://www.cnblogs.com/absorption/p/5384162.html