考研数据结构-线性表
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()函数有点问题,小伙伴试过之后可以留言反馈哦。