以单链表为存储结构实现直接插入排序的算法,求程序?

以单链表为存储结构实现直接插入排序的算法,求程序?,第1张

下面的程序是以单链表为储存结构的各种 *** 作集合,包括插入,删除,访问等 *** 作,你可以全部都看看,关键的地方我都有注释,希望能帮到你

#define true 1

#define false 0

#include<stdio.h>

#include<malloc.h>

typedef struct node

{

int data

struct node *next

}node

node *initiatesl(node *h) /*初始化链表*/

{

h->next=NULL

return(h)

}

int pread()

{

int x

scanf_s("%d",&x)

return(x)

}

void createsl(node *h) /*创建单链表*/

{

node *p,*s

int x

p=h

x=pread()

while(x!=-1)

{

s=(node*)malloc(sizeof(node))

if(!s) /*判定S是否有效,如无效,则结束*/

{

printf("Memory Out!!!")

return

}

s->data=x

p->next=s

p=s

x=pread()

}

p->next=NULL /*设定尾节点*/

}

int access(node *h,int i) /*访问的算法*/

{

int j

node *p

p=h

j=0

while(p->next!=NULL&&j<i) /*寻找节点I*/

{

p=p->next

j++

}

if(p!=NULL&&j==i) /*判断i是否有效*/

return(p->data)

else

return(NULL)

}

void enter(node *h,int i,int x) /*插入的算法*/

{

node *p,*t

int j

p=hj=0

while(p!=NULL&&j<i-1) /*寻找节点I*/

{

p=p->next

j++

}

if(j!=i-1)/*判断i是否有效*/

{

printf("i is invalued!!!\n")

return

}

t=(node*)malloc(sizeof(node)) /*插入的关键*/

t->data=x

t->next=p->next

p->next=t

}

void deletesl(node *h,int i)/*删除的算法*/

{

node *p,*s

p=h

int j

j=0

while(p->next!=NULL&&j<i-1) /*寻找节点I*/

{

p=p->next

j++

}

if(j!=i-1||p->next==NULL) /*判断i是否有效*/

{

printf("i is invalued!!!\n")

return

}

s=p->next /*记录i节点的位置*/

p->next=s->next

}

void print(node *h) /*打印输出链表*/(注:此处函数名不能用printf,因为printf是关键词,不能用来做函数名)

{

node *q

q=h->next

if(h!=NULL)

{

if(h->next!=NULL)

{

printf(" h->( ,--)->")

do {

printf("(%d,--)->",q->data)

q=q->next

}while(q->next!=NULL)

printf("(%d,^)\n\n",q->data)

}

else

printf("h->( ,^)\n")

}

}

void main()

{

node *h

int i,m,n

h=(node*)malloc(sizeof(node))

if(!h)

{

printf("Memory Out!!!\n")

}

h=initiatesl(h)

createsl(h)

print(h)

i=5m=23n=7

enter(h,i,m)

print(h)

deletesl(h,n)

print(h)

}

/*这个程序实现了链表的创建、插入、删除和输出等功能,是我数据结构上机实验做的,编译环境是VC++6.0*/

#include <malloc.h>

#include <stdio.h>

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

typedef int Status

typedef int ElemType

typedef struct Lnode{

ElemType data

struct Lnode *next

}Lnode

typedef Lnode *LinkList

//初始化链表

Status InitList(LinkList &L)

{ Lnode *p

p=(Lnode *)malloc(sizeof(Lnode))

if(p==NULL) return ERROR

L=p

L->next=NULL

return OK

}

//创建链表

Status CreatList(LinkList &L)

{ int i,len

ElemType x

LinkList p,q

printf("input list length:")

scanf("%d",&len)

printf("\ninput list data:\n")

i=0q=L

while(i<len)

{ p=(Lnode *)malloc(sizeof(Lnode))

scanf("%d",&x)

p->data=x

q->next=p

q=p

i++

}

q->next=NULL

return OK

}

//获取链表长度

int ListLength(LinkList L)

{ int len=0

LinkList p

p=L->next

while(p)

{ len++

p=p->next}

return (len)

}

//取链表中的元素

Status GetList(LinkList L,int i,ElemType &e)

{ int j

LinkList p

if(i<1)return ERROR

j=0

p=L

while(p->next!=NULL&&j<i)

{ p=p->next

j++}

if(j==i) {e=p->datareturn OK}

return ERROR

}

//插入数据

Status InsertList(LinkList &L,int i,ElemType e)

{ int j

LinkList p,q

if(i<1)return ERROR

j=0

p=L

while(p->next!=NULL&&j<i-1)

{ p=p->next

j++}

if(j==i-1)

{ q=(Lnode *)malloc(sizeof(Lnode))

q->data=e

q->next=p->next

p->next=q

return OK}

return ERROR

}

//删除数据

Status DeleteList(LinkList &L,int i,ElemType &e)

{ int j

LinkList p,q

if(i<1)return ERROR

j=0

p=L

while(p->next!=NULL&&j<i-1)

{ p=p->next

j++}

if(p->next==NULL)

{ return ERROR}

else

{ q=p->next

p->next=q->next

e=q->data

free(q)

return OK}

}

//输出链表

void PrintList(LinkList L)

{

LinkList p

p=L->next

printf("链表中的元素为:")

while(p){

printf("%4d",p->data)

p=p->next

}

printf("\n")

}

void main()

{

ElemType i,e

LinkList L

InitList(L)

CreatList(L)

printf("输入要取元素的位置:")

scanf("%d",&i)

GetList(L,i,e)

printf("第%d个位置的元素是:%d\n",i,e)

printf("输入要插入元素的位置及元素值:")

scanf("%d%d",&i,&e)

InsertList(L,i,e)

printf("已插入元素%d在第%d个位置!\n",e,i)

PrintList(L)

printf("输入要删除的位置:")

scanf("%d",&i)

DeleteList(L,i,e)

printf("已删除第%d个元素的位置%d!\n",i,e)

PrintList(L)

}

如果有不明白的可以问我,我QQ是975336234,最好是邮件的方式。

请采纳!


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

原文地址:https://54852.com/yw/12043570.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存