用C语言实现数据结构中常用算法,如对链表的操作、查找、排序等。

用C语言实现数据结构中常用算法,如对链表的操作、查找、排序等。
要求:至少编写调试实现其中之一,并将其命名为“sf-zy.c”。

调试过的
没什么大的毛病

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
typedef int ElemType;

typedef struct LNode {
ElemType date;
struct LNode *next;
}linklist,*link;

/*构造链表*//////////////////////////////////////
void IinitList(link &L)
{
if(L)delete L;
L= (link)malloc(sizeof(LNode)) ;
if (!L) exit(1);
L->next=NULL;
cout<<"链表已经建立\n";
}
//////////////////////////////////////////////////////
// /*删除结点*/// //////////////////////////////////////////////
int listdelete(link &L,int i,ElemType &e)
{
link p,q; int j;
p=L;j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
}

q=p->next;
p->next=q->next;
e=q->date;free(q);
cout<<"链表已经删除\n";
return 1;
}
////////////////////////////////////////////// /////////
// /*插入结点*/////////////// ///////////////////////
int listinsert(link &L,int i,ElemType e)
{
link p,q;
int j;
p=L;j=0;
while(p&&j<i-1)
{
p=p->next;++j;
}
q= (link)malloc(sizeof(LNode));
q->date=e;
q->next=p->next;
p->next=q; cout<<"链表已经插入\n";
return 1;
}
/////////////////////////////////////////////////////
////*显示数据*///////// ////////////////////////////////
void show(link l)
{ link p; int j;
p=l;j=0;
cout<<"链表的值为:\n";
while(p->next)
{
cout<<p->next->date<<endl;
p=p->next;
}
}
//////////////////////// /////////////////////////////////
//////销毁链表////// ////////////////////////////////////////
void destorylinst(link &L)
{
while(L)
{ link p=L;
L=L->next;

free(p) ;
}
L=NULL;
}

////// 打印表头///////////////////////////////////////
void print()
{
cout<<"------------------------\n";
cout<<"------------------------\n";
}
////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
////查找结点//// ////////////////////////////////////////

void lookfor(link l,int e)
{
if(l==NULL)
cout<<"链表未建立,请先构造链表\n" ;
else{
link p; int i=0,j=0;
p=l->next;
cout<<"你查找值的位置是:\n " ;
while(p)
{ if(p->date==e)
{ j++;
cout<<i+1<<endl;
}
p=p->next; i++;
}cout<<"查找完毕\n";
if(j==0)
cout<<"你查找的值不在链表中 、\n";

} }

void putline(link &l)
{
if(l==NULL ||l->next==NULL )
cout<<"链表未建立或是空的,请先构造链表\n" ;
else{
link p,q;
p=l->next;
while(p!=NULL)
{
q=p->next;
while(q!=NULL)
{
if(p->date>q->date)
{ ElemType t;
t=p->date;
p->date=q->date;
q->date=t;
}
q=q->next;
}
p=p->next;

} cout<<"链表已经排序 \n";
}

}

/////////////////////////////// //////////////////

///////////////////////////////////////////////////

//////测试函数///// /////////////////////

void main()
{ link L=NULL; int k;
while(1)
{
cout<<"按0退出\n"<<"按1建立\n"<<"按2插入\n"<<"按3删除\n"
<<"按4清空链表\n"<<"按5查找\n"<<"按6进行排续\n" ;
print();
int a,i,j;
cin>>a;
switch(a)
{ case 0: if(L!=NULL)

destorylinst(L) ;

exit(1);

case 1:
IinitList(L);
k=0;
print();
show(L) ;
cout<<"空的链表\n";
cout<<"链表长度为: "<<k<<endl;
print();
cout<<"是否要给链表插入值:y----n\n";
char yy;
yy=getchar();
if(yy=='y')
{
cout<<"请输入值!按回车键后输入下一个,输入0再按回车结束\n";
int bb;
cin>>bb;
while(bb!=0)
{ k++;
listinsert(L,k,bb) ;
cin>>bb;
}
print();
show(L) ; cout<<"链表长度为: "<<k<<endl;
}
else break;

print();
break;

case 2:
if(L!=NULL)

{
cout<<"输入位置:\n";
cin>>i;
while(i>k+1 || i<1)
{
cout<<"位置错误,重新输入插入位置\n" ;
cin>>i;
}
cout<<"输入植;\n";
cin>>j;
listinsert(L,i,j) ;
k++;
print();
show(L);
cout<<"链表长度为:"<<k<<endl;
print();
}
else
{ cout<<"链表不存在,请先建链表\n";
print(); }
break;

case 3:
if(L!=NULL)
{
cout<<"输入位置:\n";
cin>>i;
while(i>k || i<1)
{
cout<<"位置错误,重新输入删除位置\n" ;
cin>>i;
}
listdelete (L,i,j);
cout<<"你删除的是:\n";
cout<<j<<endl ;
k--; print();
show(L);
cout<<"链表长度为:"<<k<<endl;
print();
}
else {
cout<<"链表不存在,请先建链表\n";
print();
}
break;

case 4:
destorylinst(L) ;
cout<<"链表已经清空\n";
print();
break;

case 5:
print();
cout<<"输入要查找的值;\n";
int z;
cin>>z;
lookfor(L,z);
print();
break;
case 6:
putline(L);
if(L!=NULL)
show(L);
print();
break;

default:
break ;
}
}
delete L;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-10-30
#include <iostream.h>

class ram
{
public:
char wenzi[200];
ram *p;
};

ram wo,*ai=&wo;

int num=0;//我申请了几次内存了

void xie(void);//输入数据,然后分配内存为下次做准备。
void du(void);//把写入的数据全部显示出来

int main(void)
{
while(1)//故意死循环
{
xie();
du();

}
return NULL;
}

void xie(void)
{
cin.getline(ai->wenzi,200);
cout<<"\n______________________________________________________\n";
if((ai->p=new ram)==NULL) {cout<<"内存申请失败\n";return;}
ai=ai->p;
num++;
}

void du(void)
{
ram *ni;
ni=&wo;
int a;
for(a=num;a>0;a--)
{
cout<<ni->wenzi;
cout<<"\n";
ni=ni->p;
}
cout<<"__________________________________________________________\n";

}本回答被提问者采纳
第2个回答  2019-08-06
#include
<iostream.h>
class
ram
{
public:
char
wenzi[200];
ram
*p;
};
ram
wo,*ai=&wo;
int
num=0;//我申请了几次内存了
void
xie(void);//输入数据,然后分配内存为下次做准备。
void
du(void);//把写入的数据全部显示出来
int
main(void)
{
while(1)//故意死循环
{
xie();
du();
}
return
NULL;
}
void
xie(void)
{
cin.getline(ai->wenzi,200);
cout<<"\n______________________________________________________\n";
if((ai->p=new
ram)==NULL)
{cout<<"内存申请失败\n";return;}
ai=ai->p;
num++;
}
void
du(void)
{
ram
*ni;
ni=&wo;
int
a;
for(a=num;a>0;a--)
{
cout<<ni->wenzi;
cout<<"\n";
ni=ni->p;
}
cout<<"__________________________________________________________\n";
}

用C语言实现数据结构中常用算法,如对链表的操作、查找、排序等。
cout<<"链表的值为:\\n";while(p->next){ cout<next->date<<endl;p=p->next;} } \/\/\/ \/\/\/ \/\/\/销毁链表\/\/\/ \/\/\/ void destorylinst(link &L){ while(L){ link p=L;L=L->next;free(p) ;} L=NULL;} \/\/\/ 打印表头\/\/\/ ...

关于数据结构算法,谁能帮我用C语言写下?谢谢
typedef struct QNode \/* 结点结构 *\/ { QElemType data;struct QNode *next;}QNode,*QueuePtr;typedef struct \/* 队列的链表结构 *\/ { QueuePtr front,rear; \/* 队头、队尾指针 *\/ }LinkQueue;Status visit(QElemType c){ printf("%d ",c);return OK;} \/* 构造一个空队列Q *...

你好,数据结构(C语言)中实现有序链表的插入,删除结点基本操作,及两个有...
p2 = p1->next->next; \/\/1、排序后q节点指向p节点,在调整指向之前,我们要保存原p的指向节点地址,即:p2=p1->next->next p1->next->next = p2->next; \/\/2、顺着这一步一步往下推,排序后p1->next->next要指的是p2->next,所以p1->next->next=p2->next p2->next = p1->next; \/\/3、p2->nex...

数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成...
1、数据域:用来存储本身数据 2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。例:typedef strUCt node { char name[20];struct node *link;}stud;这样就定义了一个单链表的结构,其中char name[20]是一个用来存储姓名的字符型数组,指针*link是一个用来存储其直接后继...

c语言数据结构(双向链表排序)
\/\/初始化链表,结束后产生一个头结点指针 void InitDLList(DulLinkList *L){ (*L)=(DulLinkList)malloc(sizeof(DulNode));(*L)->next=*L;(*L)->prior=(*L)->next;} \/\/对链表进行插入操作 void ListInsert(DulLinkList *L){ int i=0,n;ElemType temp;DulNode *s,*p;p=(*L)-...

在数据结构中用c语言怎么编写用单链表将26个字母排序的程序?
char num;struct node *next;}list;void Bubble_sort(list *L);\/\/链表的冒泡排序 void Dis_list(list *L);\/\/遍历单链表 int main(){ \/\/建表 list *r,*s,*p;int n=26;\/\/存储数据的个数 s=NULL;for(int i='Z';i>='A';i--){ r=(list *)malloc(sizeof(list));r->num =...

c语言有哪些算法
排序算法是数据处理中非常基础的算法之一。在C语言中,常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些排序算法可以用于对数组、列表或其他数据结构进行排序操作。每种排序算法都有其特点和适用场景。搜索算法 搜索算法是用于在数据结构中查找特定元素的算法。在C语言中,常见的...

c语言数据结构单链表的初始化 插入 销毁 元素的取出 删除 操作 求详细C...
\/\/链表建立 Node* creat(){ Node *head = NULL, *p = NULL, *s = NULL;int Date = 0, cycle = 1;head = (Node*)malloc(sizeof(Node));if(NULL == head){ printf("分配内存失败\\r\\n");return NULL;} head->pstnext = NULL;p = head;while(cycle){ printf("请输入数据且当...

C语言程序设计 链表的综合操作(急)
用C语言编写一个程序,通过链表的建立、输出、删除、插入等基本操作,实现学生成绩管理,从键盘输入学生信息,学生信息用结构体表示,包括学号、姓名、三门课成绩:语文、数学、英语。二、课程设计目标和要求必做:1. 插入功能:在学生链表中插入一个学生的信息,要求插入后仍然保持学号有序。2. 删除功能:要求输入指定的...

c语言的数据结构和程序设计
内容:1)论述什么是数据结构及常用数据结构;2)程序设计中数据结构对算法实现的影响;3)针对典型的信息处理系统(数据量大,信息表述类型复杂,分布式,跨平台等要求)编制程序时,... 内容:1)论述什么是数据结构及常用数据结构;2)程序设计中数据结构对算法实现的影响;3)针对典型的信息处理系统(数据量大,信息表述类型复杂...

相似回答
大家正在搜