求C语言单链表 源代码

求C语言单链表 源代码,第1张

#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

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12158155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存