滴水逆向联盟
标题:
基于visual Studio2013解决C语言竞赛题之1069链表查找删除
[打印本页]
作者:
大灰狼
时间:
2014-8-11 09:25
标题:
基于visual Studio2013解决C语言竞赛题之1069链表查找删除
题目
download1.png
(74.51 KB, 下载次数: 476)
下载附件
保存到相册
2014-8-11 09:25 上传
解决代码及点评
<pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"></pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code">/*
功能:建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,
将此结点删除,输出最后的链表。
时间:17:00 2013/10/25
*/
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
struct student69
{
int ID;
char name[80];
int sex;
int age;
struct student69 *pNext;
};
typedef struct student69 ST;
ST *initList69() //初始化链表!!!
{
ST *pHead=(ST *)malloc(sizeof(ST));
pHead->pNext=NULL;
return pHead;
}
void insertSt(ST *pHead,int id,int sex,int age)
{
while (pHead->pNext!=NULL) //后继不为空,则指针向后移,直到最后一个结点
{
pHead=pHead->pNext;
}
ST *p=(ST *)malloc(sizeof(ST)); //创建新节点
if(p==NULL)return; //结点是否创建成功
pHead->pNext=p; //最后一个结点指向新节点
p->ID=id;
p->age=age;
p->sex=sex;
char a[80]={'\0'};
puts("Please enter the name: ");
scanf_s("%s",a);
strcpy_s(p->name,a);
p->pNext=NULL; //新结点后继赋空
}
void showStudent69(ST *pHead) //输出全部信息
{
ST *p=pHead->pNext;
do
{
printf("ID: %d\t",p->ID);
printf("Name %s\t",p->name);
printf("age %d\t",p->age);
printf("sex %d\n",p->sex);
} while ((p->pNext != NULL)&&(p=p->pNext));
}
void deleteSt(ST *pHead,int theAge)
{
ST *p=pHead->pNext;
ST *prior=pHead; //保存前驱
while(p->age!=theAge&&p->pNext!=NULL) //不满足条件往后走
{
prior=p;
p=p->pNext;
}
if(p->age==theAge) //找到条件 将后继赋给前驱
{
prior->pNext=p->pNext;
}
free(p); //释放结点
if(p->age!=theAge)return;
}
void main()
{
ST *pHead=initList69();
insertSt(pHead,1,1,18);
insertSt(pHead,2,0,19);
insertSt(pHead,3,1,30);
showStudent69(pHead);
int theAge;
scanf_s("%d",&theAge);
deleteSt(pHead,theAge);
showStudent69(pHead);
system("pause");
}</pre><br><br><br></pre></pre></pre>
欢迎光临 滴水逆向联盟 (http://www.dtdebug.com/)
Powered by Discuz! X3.2