考研数据结构-线性表

考研数据结构-线性表

1.结构

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct node{
	ElemType data;			//数据域
	struct node *next;		//指针域
}LNode,*LinkList;

2.初始化

LinkList GreatLinkList(int n){
	LinkList p,r,list=NULL;
	ElemType e;
	int i;
	for(i=1;i<=n;i++){
		printf("头结点:");
		scanf("%d",&e);
		p=(LinkList)malloc(sizeof(LNode));		//开辟空间
		p->data=e;
		p->next=NULL;
		if(!list){
			list=p;			//头指针
		}
		else {
			r->next=p;		//结点加入链表
		}
		r=p;
	}
	printf("init finish\n");
	return list;			//返回链表头指针
}

3.插入结点

void insertLinkList(LinkList *list,LinkList q,ElemType e){
	LinkList p;
	p=(LinkList)malloc(sizeof(LNode));		//开辟空间
	p->data=e;
	if(!*list){
		*list=p;					//赋值头指针
		p->next=NULL;
	}
	else{
		p->next=q->next;			//插入
		q->next=p;
	}
	printf("insert:%d\n",e);
}

4.删除结点

void delLink(LinkList *list,LinkList q){
	LinkList r;
	if (q==*list){					//若删除头结点
		*list=q->next;
		free(q);
	}
	else{							//删除其他结点
		for(r=*list;r->next!=q;r=r->next){
			if(r->next!=NULL){
				r->next=q->next;
				free(q);			//释放空间
			}
		}
	}
}

5.销毁线性表

void destoryLinkList(LinkList *list){
	LinkList p,q;
	p=*list;
	while(p){
		q=p->next;		//移动一个,销毁一个
		free(p);
		p=q;
	}
	*list=NULL;
}

6.测试代码

int main() {
	int e,i;
	LinkList l,q;
	q=l=GreatLinkList(1);
	printf("init insert begin\n");
	scanf("%d",&e);
	while(e){
		insertLinkList(&l,q,e);
		q=q->next;
		scanf("%d",&e);
		if(e==0){
			break;
		}
	}
	printf("insert final");
	q=l;
	printf("输出:\n");
	while (q) {
		printf("%d",q->data);
		q=q->next;
	}
	//删除第五个
	q=l;
	for(i=0;i<4;i++){
		if(q==NULL){
			printf("表长小于5");
			getche();
			return 0;
		}
		q=q->next;
	}
	delLink(&l,q);
	q=l;
	printf("删除后:");
	while (q) {
			printf("%d",q->data);
			q=q->next;
		}
	destoryLinkList(&l);				//销毁链表
	return 0;
}

小结:由于使用的是mac的coderunner,所以测试代码中的getche()函数有点问题,小伙伴试过之后可以留言反馈哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章