/*昨天晚上,孙蕊蕊学霸与我的对话:
13-软工-孙蕊蕊 2014/10/19 21:59:06
数据结构我们学的链表,你把有关的算法用c语言实现吗?
中国好利鹏 2014/10/19 21:00:37
恩,上个学期实现过。
2014/10/19 21:01:06
13-软工-孙蕊蕊 2014/10/19 21:01:06
,程序还有吗?
中国好利鹏 2014/10/19 21:01:51
没有。打算今天再写一遍,有事耽误了。明天给你
13-软工-孙蕊蕊 2014/10/19 21:02:19
好的。
真的本来打算昨天晚上就搞定的。可是。。。哎,,,没有可是了 。。。。
以下的代码,不是书上的,是老师课上讲的一些思路。比如置空表算法的合理性。
还有输出函数,是我自己写的。
希望可以帮助小伙伴们。
*/
#include "stdio.h"
#include "malloc.h"
typedef struct node{
int data;
struct node *next;
}LinkList;
LinkList *create(){//创建单链表
LinkList *p,*q,*head;
int k;
head=(LinkList *)malloc(sizeof(LinkList));
q=head;
printf("请输入int数据,以0结束\n");
scanf("%d",&k);
while(k!=0){
p=(LinkList *)malloc(sizeof(LinkList));
p->data = k;
q->next = p;
q=p;
q->next=NULL;
scanf("%d",&k);
}
return head;
}
LinkList * setnull(LinkList *L){//单链表置空表方法
LinkList *p,*q;
if(L->next == NULL){return L;//判断是否为空表
}
else{ p=L->next;
L->next=NULL;//将头指针置空
q=p->next;
while(q!=NULL){//释放空间
free(p);
p=q;
q=q->next;
}
}
return L;
}
//单链表求表长算法
int Llength(LinkList *L){
LinkList *p;
int n=0;
p = L->next;
while(p!=NULL){
p=p->next;
n++;
}
return n;
}
//单链表按序号取元素算法
LinkList *Get(LinkList *L,int i){
int j; LinkList *p;
p=L->next;
j=1;
while(p!=NULL && j<i){
p=p->next;
j++;
}
if(i == j){
return p;
}
else
return NULL;
}
//单链表插入算法
void Linsert(LinkList *L,int i,int x){
LinkList *p,*s;
int j;
p=L;
j=0;
while(p!=NULL && j<i-1){
p=p->next;
j++;
}
if(p == NULL) printf("序号错误!");
else{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=x;
s->next=p->next;
p->next=s;
}
}
//单链表删除算法
void Ldelete(LinkList *L,int i){
LinkList *p,*u;
int j;
p=L;
j=0;
while(p!=NULL && j<i-1){
p=p->next;
j++;
}
if(p!=NULL &&p->next!=NULL){
u=p->next;
p->next=u->next;
free(u);
}
}
void Loutput(LinkList *L){
if(L->next == NULL){printf("这个表为空!");//判断是否为空表
}
else{
while(L->next!=NULL){
printf("%d\t",L->next->data);
L=L->next;
}
printf("结束\n");
}
}
int main(){
int n;
LinkList *L,*M;
L=create();
printf("创建的表为:");
Loutput(L);
n=Llength(L);
printf("表长为:%d\n",n);
M=Get(L,3);
printf("得到第三位置的值:%d\n",M->data);
Linsert(L,3,8);
printf("将8插入到第三个为位置:\n");
Loutput(L);
Ldelete(L,3);
printf("删除第三个位置的值:\n");
Loutput(L);
L=setnull(L);
printf("表置空后的值:");
Loutput(L);
}
13-软工-孙蕊蕊 2014/10/19 21:59:06
数据结构我们学的链表,你把有关的算法用c语言实现吗?
中国好利鹏 2014/10/19 21:00:37
恩,上个学期实现过。
2014/10/19 21:01:06
13-软工-孙蕊蕊 2014/10/19 21:01:06
,程序还有吗?
中国好利鹏 2014/10/19 21:01:51
没有。打算今天再写一遍,有事耽误了。明天给你
13-软工-孙蕊蕊 2014/10/19 21:02:19
好的。
真的本来打算昨天晚上就搞定的。可是。。。哎,,,没有可是了 。。。。
以下的代码,不是书上的,是老师课上讲的一些思路。比如置空表算法的合理性。
还有输出函数,是我自己写的。
希望可以帮助小伙伴们。
*/
#include "stdio.h"
#include "malloc.h"
typedef struct node{
int data;
struct node *next;
}LinkList;
LinkList *create(){//创建单链表
LinkList *p,*q,*head;
int k;
head=(LinkList *)malloc(sizeof(LinkList));
q=head;
printf("请输入int数据,以0结束\n");
scanf("%d",&k);
while(k!=0){
p=(LinkList *)malloc(sizeof(LinkList));
p->data = k;
q->next = p;
q=p;
q->next=NULL;
scanf("%d",&k);
}
return head;
}
LinkList * setnull(LinkList *L){//单链表置空表方法
LinkList *p,*q;
if(L->next == NULL){return L;//判断是否为空表
}
else{ p=L->next;
L->next=NULL;//将头指针置空
q=p->next;
while(q!=NULL){//释放空间
free(p);
p=q;
q=q->next;
}
}
return L;
}
//单链表求表长算法
int Llength(LinkList *L){
LinkList *p;
int n=0;
p = L->next;
while(p!=NULL){
p=p->next;
n++;
}
return n;
}
//单链表按序号取元素算法
LinkList *Get(LinkList *L,int i){
int j; LinkList *p;
p=L->next;
j=1;
while(p!=NULL && j<i){
p=p->next;
j++;
}
if(i == j){
return p;
}
else
return NULL;
}
//单链表插入算法
void Linsert(LinkList *L,int i,int x){
LinkList *p,*s;
int j;
p=L;
j=0;
while(p!=NULL && j<i-1){
p=p->next;
j++;
}
if(p == NULL) printf("序号错误!");
else{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=x;
s->next=p->next;
p->next=s;
}
}
//单链表删除算法
void Ldelete(LinkList *L,int i){
LinkList *p,*u;
int j;
p=L;
j=0;
while(p!=NULL && j<i-1){
p=p->next;
j++;
}
if(p!=NULL &&p->next!=NULL){
u=p->next;
p->next=u->next;
free(u);
}
}
void Loutput(LinkList *L){
if(L->next == NULL){printf("这个表为空!");//判断是否为空表
}
else{
while(L->next!=NULL){
printf("%d\t",L->next->data);
L=L->next;
}
printf("结束\n");
}
}
int main(){
int n;
LinkList *L,*M;
L=create();
printf("创建的表为:");
Loutput(L);
n=Llength(L);
printf("表长为:%d\n",n);
M=Get(L,3);
printf("得到第三位置的值:%d\n",M->data);
Linsert(L,3,8);
printf("将8插入到第三个为位置:\n");
Loutput(L);
Ldelete(L,3);
printf("删除第三个位置的值:\n");
Loutput(L);
L=setnull(L);
printf("表置空后的值:");
Loutput(L);
}