單鏈表在VC 6.0的環境下運行的代碼如下
#include<stdlib.h>
#include<stdio.h>
typedef int ElemType;
typedef int Status;
#define ERROR 0;
#define OK 1;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status GetElem_L(LinkList L,int i,ElemType &e){
LinkList p;
p=L->next;int j=1;
while(p&&j<i){
p=p->next;++j;}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}
//插入元素
Status ListInsert_L(LinkList &L,int i,ElemType e){ //在帶頭節點的單連線性表L中的第i個位置之前插入元素e
LinkList p;
p=L;int j=0;
while(p&&j<i-1){p=p->next;++j;} //尋找第i-1個結點
if(!p||j>i-1)return ERROR; //i小於1或大於表長加1
LinkList s;
s=(LinkList)malloc(sizeof(LNode)); //生成新結點
s->data=e;s->next=p->next; //插入L中
p->next=s;
return OK;
}
//刪除元素
Status ListDelete_L(LinkList &L,int i,ElemType &e){ //在帶頭結點的單鏈線性表L中,刪除第i個元素,並由e返回其值
LinkList p;int j;
p=L; j=0;
while(p->next&&j<i-1){
p=p->next;++j;
}
if(!p->next||j>i-1)return ERROR; //刪除位置不合理
LinkList q;
q=p->next;p->next=q->next; //刪除並釋放結點
e=q->data;free(q);
return OK;
}
//創建單鏈線性表
void CreateList_L(LinkList &L,int n){
//逆序輸入n個元素的值,建立帶表頭結點的單鏈線性表L
L=(LinkList) malloc(sizeof(LNode));
L->next=NULL; //先建立一個帶頭結點的單鏈表
for(int i=n;i>0;--i){
LinkList p;
p=(LinkList)malloc(sizeof(LNode)); //生成新結點
scanf("%d",&p->data); //輸入元素值
p->next=L->next;L->next=p;//插入到表頭
}
}
//輸出鏈表的元素
void Print_L(LinkList L,int n){
LinkList m;int t;
m=L->next;
for(t=1;t<=n;t++){
printf("%-4d",m->data);m=m->next;
}
}
void main()
{
printf("請輸入單鏈表的元素個數:");
int n;
scanf("%d",&n);
LinkList L;
CreateList_L(L,n);
printf("單鏈表元素爲\n");
Print_L(L,n);
printf("\n請輸入插入位置和要插入的元素值:");
int i;
ElemType e;
scanf("%d%d",&i,&e);
ListInsert_L(L,i,e);
Print_L(L,n+1);
printf("\n刪除的位置爲:");
int a;
ElemType b;
scanf("%d",&a);
ListDelete_L(L,a,b);
printf("\n刪除的元素值爲:%d",b);
printf("\n");
}