在数据结构中,如何定义一个单链表类、一个顺序表类、一个测试类、来实现数据的插入与删除呢?

2024-11-23 09:16:09
推荐回答(2个)
回答(1):

/*这个程序实现了链表的创建、插入、删除和输出等功能,是我数据结构上机实验做的,编译环境是VC++6.0*/
#include
#include
#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=0; q=L;
while(i { 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 { p=p->next;
j++;}
if(j==i)
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 { 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 { p=p->next;
j++;}
if(p->next==NULL)

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,最好是邮件的方式。
请采纳!

回答(2):

这个问题应该根据特定的程序设计语言,比如C、VB,还有汇编语言。你这么笼统的问,别人不好回答的。
一般数据结构都有针对特定语言的描述,找本书仔细看看吧。