#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct people
{
char name[10]
int age
struct people * next
}
int main()
{
struct people * head=NULL
struct people * prev , * current
int flag=1
while(flag!=0)
{
printf("请输入学生姓名,年龄:(年龄输入0结束所有输入工作)\n")
current=(struct people *)malloc(sizeof(struct people))
if(head==NULL)
head=current
else
prev->next=current
current->next=NULL
scanf("%s",&current->name)
scanf("%d",&current->age)
prev=current
flag=current->age
}
printf("Output:\n")
if(head==NULL)
printf("无资料。\n")
else
{
current=head
while(current->next!=NULL)
{
printf("姓名:%s\n年龄:%d\n\n",current->name,current->age)
current=current->next
}
}
}
至于排序,断开旧链表,将前后指针链接到新的节点就好
如果还有问题欢迎再问哈
#include<stdio.h>#include<stdlib.h>
# define LEN sizeof(struct biao)
struct biao
{
int num
char name[20]
struct biao *next
}
int n
struct biao *create()
{
struct biao *head,*p1,*p2
n=0
p1=p2=(struct biao *)malloc(LEN)
scanf("%d%s",&p1->num,p1->name)
head=NULL
while(p1->num!=0)
{
n=n+1
if(n==1)head=p1
else p2->next=p1
p2=p1
p1=(struct biao *)malloc(LEN)
scanf("%d%s",&p1->num,p1->name)
}
p2->next=NULL
return(head)
}
void print(struct biao *head)
{
struct biao *p
p=head
if(p!=NULL)
do
{
printf("num:%d\tname:%s\t\n",p->num,p->name)
p=p->next
}while(p!=NULL)
else printf("链表为空!\n")
}
struct biao *sort(struct biao *head)/*此函数为按逆序排列函数*/
{
struct biao *p1,*p2,*p3
p1=head
if(p1==NULL)goto end
else
{
if(p1->next==NULL)goto end
else
{
p2=p1->next
while(p2->next!=NULL)
{
if(p1==head){p3=p2->nextp1->next=NULLp2->next=p1p1=p2p2=p3p3=p3->next}
else
{
p2->next=p1
p1=p2p2=p3p3=p3->next
}
}
}
}
if(p2->next==NULL){head=p2p2->next=p1}
end:
return head
}
int main()
{
struct biao *p
printf("说明:\n链表成员包括“编号”和“名称”。\n请对链表赋值:")
p=create()
print(p)
p=sort(p)
printf("逆序排列完毕!\n")
print(p)
return 0
}
懒得自己打,给你找到这个,你用后一半即可,自己改改就行了:1、建立一个单链表,并从屏幕显示单链表元素列表。
2、从键盘输入一个数,查找在以上创建的单链表中是否存在该数如果存在,显示它的位置如果不存在,给出相应提示。
3、在上述的单链表中的指定位置插入指定的元素
4、删除上述单链表中指定位置的元素。
源程序:头文件
#include<iostream.h>
#include<malloc.h>
typedef char ElemType
typedef int Status
#define OK 1
#define ERROR 0
typedef struct LNode{
ElemType data
LNode *next
}LNode,*LinkList
void about(){ //版本信息
cout<<"单链表的 *** 作"
}
void showmenu(){ //功能列表
cout<<endl <<" **********功能**********"<<endl
<<" * 1.输出单链表的全部数据*"<<endl
<<" * 2.查找链表元素 *"<<endl
<<" * 3.链表插入元素 *"<<endl
<<" * 4.链表删除元素 *"<<endl
<<" * 5.结束 *"<<endl
<<" ************************"<<endl
<<"请输入所需功能: "
}
//*******查看输入的全部数据*********
void PrintList(LinkList L){
LinkList p
cout<<endl<<"你输入的数据为: "
p=L->next //从头结点开始扫描
while(p){ //顺指针向后扫描,直到p->next为NULL或i=j为止
cout<<p->data
p=p->next}
cout<<endl}
//逆序输入 n 个数据元素,建立带头结点的单链表
void CreateList_L(LinkList &L, int n) {
int i
LinkList p
L = new LNode
L->next = NULL // 先建立一个带头结点的单链表
cout<<"逆序输入 n 个数据元素,建立带头结点的单链表"<<endl
for (i = ni >0--i) {
p = new LNode
cin>>p->data // 输入元素值
p->next = L->next L->next = p // 插入
}
}
// L是带头结点的链表的头指针,以 e 返回第 i 个元素
Status GetElem_L(LinkList L, int i, ElemType &e) {
int j
LinkList p
p = L->next j = 1 // p指向第一个结点,j为计数器
while (p &&j<i) { p = p->next ++j }// 顺指针向后查找,直到 p 指向第 i 个元素或 p 为空
if ( !p || j>i )
return ERROR // 第 i 个元素不存在
e = p->data// 取得第 i 个元素
return OK
}
// 本算法在链表中第i 个结点之前插入新的元素 e
Status ListInsert_L(LinkList L, int i, ElemType e) {
int j
LinkList p,s
p = L j = 0
while (p &&j <i-1)
{ p = p->next ++j} // 寻找第 i-1 个结点
if (!p || j >i-1)
return ERROR // i 大于表长或者小于1
s = new LNode // 生成新结点
if ( s == NULL) return ERROR
s->data = e
s->next = p->next p->next = s// 插入
return OK
}
Status ListDelete_L(LinkList L, int i, ElemType &e)
{LinkList p,q<br>int j<br>p = L j = 0<br>while (p->next &&j <i-1) { p = p->next ++j}
// 寻找第 i 个结点,并令 p 指向其前趋
if (!(p->next) || j >i-1)
return ERROR // 删除位置不合理
q = p->next p->next = q->next // 删除并释放结点
e = q->data free(q)
return OK
}
#include"LinkList.h"
void main()
{LinkList L<br>int n,choice,i<br>ElemType e<br>about()<br>cout<<"请输入链表中元素的个数"<br>cin>>n<br>CreateList_L(L, n)<br>showmenu() //功能列表 <br>cin>>choice <br>while(choice!=5)<br>{ //输入时候退出程序<br>switch(choice){<br> case 1:PrintList(L)break //1.查看输入的全部数据<br> case 2:{<br>cout<<"输入你要查找的元素的位置: "<br> cin>>iGetElem_L(L, i, e)<br>cout<<"第"<<i<<"个元素的值是"<<e<<endl<br>break} //2.查找链表元素
case 3:
{cout<<"请输入你要插入元素的位置i: "<br> cin>>i<br> cout<<endl<<"请输入你要插入元素的值: "<br> cin>>e<br> ListInsert_L(L, i,e)<br> break} //3.链表插入元素
case 4:
{cout<<"请输入你要删除元素的位置"<br>cin>>i<br>ListDelete_L(L, i, e) <br>break} //4.链表删除元素
default:cout<<"输入错误,请输入-5,输入重显示功能表^_^ "<<endl
}
cout<<endl<<"输入功能序号:"
cin>>choice
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)