问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求c语言链表编程

发布网友 发布时间:2022-04-22 03:23

我来回答

3个回答

热心网友 时间:2024-02-23 16:46

简单写了个!!看看运行一下

#include<iostream>
#include<conio.h>
using namespace std;
#define LENGTH 20
#define OK 1
#define ERROR 0

typedef long LElemType; /*学号变量类型*/
typedef int IElemType; /*成绩变量类型*/
typedef char CElemType;

typedef int Status; /*返回值的类型*/

typedef struct student
{
LElemType num;
CElemType name[LENGTH];
CElemType sex[LENGTH];
IElemType age;
student *next;

}node;

typedef struct LIST
{
node *head,*tail;

}link;

Status Init(link *s)
{
s->head = s->tail = (node *)malloc(sizeof(node)); /*头结点*/
if(NULL == s->head)
{
cout<<"分配失败!"<<endl;
return ERROR;
}
s->head->num = 0; /*头节点的学号用来放置节点个数*/
s->head->next = NULL;
return OK;
}

node *MakeNode(int i) /*生成存放学生信息的节点*/
{
node *p=(node *)malloc(sizeof(node));
cout<<"请输入第"<<(i+1)<<"个学生的信息: ";
cin>>p->num>>p->name>>p->sex>>p->age;
p->next = NULL;
return p;
}

Status Insert(link *s,int n)
{
for(int i=0; i<n; i++) /*录入n个学生的信息*/
{
node *p = MakeNode(i);
s->tail->next = p;
s->tail = p;
s->head->num++; /*修改头结点中存放学生信息条数每增加一个节点就要++1*/
}
return OK;
}

Status display(link *s)
{
node *p = s->head->next; /*让p指针指向头结点的下一个节点,因为头结点只用来存放了学生的人数*/
if(!p)
{
cout<<"还没有学生信息!"<<endl;
return ERROR;
}
while(p)/*只要p指针指向不为空就要输出*/
{
cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->age<<endl;
p = p->next;
}
return OK;
}

Status SortByNum(link *s) /*按照学号升序排序*/
{
int n = s->head->num;
node *p,*cur,*next;
for(int i=0; i<n-1; i++)
{
p= s->head;
cur=p->next;
next = cur->next;
for(int j=0; j<n-1-i; j++)
{
if(next->num<cur->num)
{
p->next=next; /*若前面的大于后面的就要交换前后两个值*/
cur->next = next->next;
next->next = cur;

p=next; /*交换之后要修改当前指针与当前指针与下一个指针的位置*/
next=cur->next;

}else{ /*挨着的两个值,前面的不大于后面的只要将指针往后面移动*/
p=cur;
cur = next;
next = next->next;
}
}

}

return OK;
}

Status DeleteStu(link *s,long *num)
{
if(s->head->next==NULL)
{
cout<<"没有任何学生信息记录"<<endl;
return ERROR;
}
else
{
cout<<"请输入你要删除的学生的学号:";
cin>>*num;
node *cur,*p;
cur = s->head;
while(cur->next)
{
if(cur->next->num == *num)
{
break;
}
else{
cur = cur->next;
}
}
if(cur->next)
{
p = cur->next;
cur->next = p->next;
p->next = NULL;
free(p);
s->head->num--;
return OK;
}else{
cout<<"不存在该学生的信息"<<endl;
return ERROR;
}
}
}

Status QueryStu(link *s,long num)
{
node *p = s->head->next; /*让p指针指向头结点的下一个节点,因为头结点只用来存放了学生的人数*/
if(!p)
{
cout<<"还没有学生信息!"<<endl;
return ERROR;
}
while(p)/*只要p指针指向不为空就要输出*/
{
if(p->num==num)
{
cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->age<<endl;
break;
}
p = p->next;
}
cout<<"没有该学生信息!"<<endl;
return OK;
}

Status Menu()
{
int k=-1;
while(k<1||k>5){
system("cls");
cout<< " 学生信息管理程序实现\n"
" 1、学生信息的录入 \n"
" 2、学生信息的显示 \n"
" 3、学生信息的查询 \n"
" 4、学生信息的删除 \n"
" 5、系统推出 \n\n\n";

if(k==-1)
{
cout<<"请选择功能:";
}else if(k<1 || k>5)
{
cout<<"(选择错误)请重新选择:"<<endl;
}
fflush(stdin);
scanf("%d",&k);

}
return k;
}

int main()
{
link s;
int n=0,k=-1;
long num;
Init(&s);
do{
switch(k=Menu())
{
case 1:
cout<<"你想录入多少学生的记录:n=";
fflush(stdin);
scanf("%d",&n);
if(n!=0)
{
Insert(&s,n);
cout<<n<<"个学生信息录入完毕...";
}
else{
cout<<"输入学生个数要大于0的正整数...";
}
getch();
break;
case 2:
puts("所有学生的信息: \n");
SortByNum(&s);
display(&s);
cout<<"所有信息显示完毕...";
getch();
break;
case 3:
cout<<"输入要查询学生的学号:";
cin>>num;
QueryStu(&s,num);
getch();
break;
case 4:
if(DeleteStu(&s,&num))
{
cout<<"删除操作成功...";
}
else{
cout<<"删除操作失败...";
}
getch();
break;
case 5:
cout<<"成功退出了系统"<<endl;
exit(0);
break;
default:
break;
}

}while(k!=5);
return OK;
}

热心网友 时间:2024-02-23 16:47

#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

struct student{
int Number;
int Age;
char Sex;
string name;
};

//线性表
struct List{
student data[10];
int last;
};
//线性表初始化
bool Initialize_List( struct List &L ){
L.last = 0;
return true;
}
//添加元素
bool Add_Item( struct List &L ){
system("cls");
cout<<"1>增加元素!\n输入学生学号:";
cin>>L.data[L.last].Number;
cout<<"\n输入学生性别(F or M):";
cin>>L.data[L.last].Sex;
cout<<"\n输入学生姓名:";
cin>>L.data[L.last].name;
cout<<"\n输入学生年龄:";
cin>>L.data[L.last].Age;
L.last++;
return true;
}
//删除元素
string Delete_Item( struct List &L){
system("cls");
int pos;
cout<<"2>删除元素!\n输入位置:";
cin>>pos;
for( pos--; pos <= L.last-1; pos++){
L.data[pos] = L.data[pos+1];
}
L.last--;
return "Sucessfully Delete!";
}
//查看学生
void View_Data( struct List &L ){
system("cls");
int pos;
pos--;
cout<<"3>查看学生\n输入位置:";
cin>>pos;
if( pos >= L.last){
cout<<"\n不存在!";
getch();
return;
}
cout<<"学号\t性别\t名字\年龄"<<endl;
cout<<L.data[pos].Number<<"\t"
<<L.data[pos].Sex <<"\t"
<<L.data[pos].name <<"\t"
<<L.data[pos].Age <<endl;
getch();
}
//查看全部
void View_All( struct List &L ){
system("cls");
if( !L.last ){
cout<<"NULL";
return;
}
cout<<"4>查看全部\n序号\t性别\t名字\t年龄\n";
for( int pos = 0; pos<L.last; pos++ ){
cout<<L.data[pos].Number<<"\t"
<<L.data[pos].Sex <<"\t"
<<L.data[pos].name <<"\t"
<<L.data[pos].Age <<"\n";
if( !(pos+1)%10 ) getch();
}
getch();
}
//保存
void List_Save( struct List &L ){
system("cls");
cout<<"5>保存!\n";
ofstream ofile;
ofile.open( "List.txt" );
ofile<<L.last<<endl;
for( int pos=0; pos<L.last; pos++){
ofile<<L.data[pos].Number<<"\t"
<<L.data[pos].Sex<<"\t"
<<L.data[pos].name<<"\n";
}
ofile.close();
cout<<"Save Sucessgully!"<<endl;
getch();
}
//读取
bool List_Read( struct List &L ){
ifstream ifile;
ifile.open( "List.txt" );
if( ifile>>L.last ){
for( int pos=0; pos<L.last; pos++){
ifile>>L.data[pos].Number
>>L.data[pos].Sex
>>L.data[pos].name
>>L.data[pos].Age;
}
}
else return false;
ifile.close();
return true;
}

int main(){
int key=0;
List L;
if( !List_Read( L ) )
if( Initialize_List( L ) ){
cout<<"Initialize List OK!";
getch();
}

while( key != 27 ){
system("cls");
cout<<"\n\t1>增加元素!"<<endl;
cout<<"\n\t2>删除元素!"<<endl;
cout<<"\n\t3>删除全部!"<<endl;
cout<<"\n\t4>查看学生!"<<endl;
cout<<"\n\t5>查看全部!"<<endl;
cout<<"\n\t6>保存文件!"<<endl;
cout<<"\n\t7>退出。" <<endl;

key = getch();
switch(key){
case 49:
if( Add_Item( L ) ){
cout<<"Add Sucessfully!";
} break;
case 50:
cout<<Delete_Item( L ); break;
case 51:
Initialize_List( L ); break;
case 52:
View_Data( L ); break;
case 53:
View_All( L ); break;
case 54:
List_Save( L ); break;
case 55:
case 27: return 1;
}
}
return 1;
}

热心网友 时间:2024-02-23 16:47

这个在c++有stack 这个堆栈就是链栈
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
谁能给个单机版的风云之雄霸天下啊?? 求风云雄霸天下PC单机游戏WIN7版 雄霸天下任务指南 开心网001老房子卖了以后家具还有吗? 为什么001开心网买房子组件删除仓库里的东西都没了 请教一下,开心001的开心庄园里面的建材有好多富余的的 除了5元一个卖... 开心网001小号怎么给大号送房子? 开心网001多少级能送别人房子?多少级能接受别人给的房子? 开心网001果实或家具能送人吗 开心网(kaixin001)怎么买外地房子? c语言程序课程设计,链表,求助 C语言连理枝链表程序设计问题 用C语言编程实现单链表的基本操作 c语言链表应用编程,急求!! Win7系统关机速度慢一直显示“正在关机”怎么解决 c语言程序设计 用链表编写商品库存管理。 WIN7旗舰版点关机不能让电脑关机,只能长按电源键... C语言编程新建一个链表,包含5个以上结点 最近总觉得听别人说话听不清楚该怎么办啊 c语言程序设计——链表的应用 win7操作系统电脑关机之后一直自动重启该怎么办 语音聊天我能清楚别人说话,别人却听不清楚我是说话? 用C语言编程(创建一个单向链表) [求助]win7正常关机后,显示器熄灭,但是机箱不断电 说话别人老听不清楚怎么办? 用C语言编程:创建一个链表 并在该链表的任意位置... Win7电脑关机后就黑屏电源键一直亮着 打电话对方总听不清说话,有杂音 C语言程序设计对链表的综合操作 win7 无法正常关机 电源灯一直不灭 C语言程序设计 链表的综合操作(急) 单链表的C语言编程问题 双向链表排序c语言程序设计 C语言编程关于链表 C语言程序设计学生成绩管理系统,要求链表 圣诗蔓浓缩型精华液在中脉有吗?我去实体店买了花... 兰州金色年华浓缩去污精华液的价格是多少? 谁知道自然堂美白精华液多少钱啊? 圣诗蔓浓缩型精华液可以用在阴道上吗?可以用在阴道... 上海星巴克咖啡多少钱 臻幼堂浓缩精华液有副作用吗? 精华液的功效是什么? 淡斑精华液排行榜10强品牌有哪些 淡斑精华液排行榜10强有哪些品牌?求2020最新版 约翰内斯堡在哪个国家? 南非,约翰内斯堡现在是几点? 南非 约翰内斯堡 时间 数码相机为什么不用胶卷也能拍照? 为什么德国柏林的时间跟南非的约翰内斯堡的时间是... 胶卷相机可不可以不冲洗照片