
#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,最好是邮件的方式。
请采纳!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)