c語言--線性表的鏈式儲存
阿新 • • 發佈:2018-12-20
#include "stdio.h" #include "malloc.h" #define datatype int #define ERROR 0 #define OK 1 typedef int ElemType; typedef struct node { datatype data; //連結串列的資料域 struct node *next; //連結串列的指標域 } LNode,*LinkList; LinkList Creat_LinkList1( ) //頭插入法建立單鏈表演算法 { LinkList head; LNode *s; head=(LinkList)malloc(sizeof(LNode)); head->next=NULL; char flag='Y'; while(flag=='Y'||flag=='y'){ s=(LNode *)malloc(sizeof(LNode)); printf("請輸入新節點資料:"); scanf("%d",&s->data); s->next=head->next; head->next=s; getchar(); printf("繼續輸入嗎?(Y/N):"); scanf("%c",&flag); } return (head->next); } /*按序號查詢 Get_Linklist(L,i) 在單鏈表L中查詢第i個元素結點,找到返回其指標,否則返回空*/ LNode *Get_LinkList(LinkList L,int i) { int j; LNode *p; p=L; j=0; while((p->next!=NULL)&&(j<i)) { p=p->next; j++; } if(i==j) return p; else return NULL; } /*插入運算 Insert_LinkList(L,i,x) 在單鏈表L的第i個位置上插入值為x的元素*/ int Insert_LinkList(LinkList L, int i, datatype x) { int j=0; LinkList p=L,s; while(j<i-1&&p!=NULL) { j++; p=p->next; } if(p==NULL) return false; else { s=(LNode *)malloc(sizeof(LNode)); s->data=x; s->next=p->next; p->next=s; return true; } } /*刪除運算:Del_LinkList(L,i) 刪除單鏈表L上的第i個數據結點*/ int Del_LinkList(LinkList L,int i) { char e; int j=0; LinkList p=L,q; while(j<i-1&&p!=NULL) { j++; p=p->next; } if(p==NULL) return false; else { q=p->next; if(q==NULL) return false; e=q->data; p->next=q->next; free(q); return true; } } void print(LinkList L) //輸出單鏈表 { LNode *p=L; while(p->next!=NULL) { printf("%d\t",p->data); //輸出表中非最後一個元素 p=p->next; } printf("%d\n",p->data); //輸出表中最後一個元素 } void main() { LinkList H; int i,j,k; datatype x; do { printf("\n\n\n\n"); printf("\t\t\t 連結串列子系統\n"); printf("\t\t*******************************\n"); printf("\t\t* 1----建 表 *\n"); printf("\t\t* 2----插 入 *\n"); printf("\t\t* 3----刪 除 *\n"); printf("\t\t* 4----查 找 *\n"); printf("\t\t* 5----顯 示 *\n"); printf("\t\t* 0----返 回 *\n"); printf("\t\t*******************************\n"); printf("\t\t 請選擇選單項(0-5):"); scanf("%d",&k);getchar(); if (k==1) H=Creat_LinkList1( ); //用頭插入法建立單鏈表 else if (k==2) //線上性表第i位置處插入值為X的元素 { printf("\n 請輸入插入的位置i和資料X(輸入格式:i,X):"); scanf("%d,%d",&i,&x); j=Insert_LinkList(H,i,x); } else if (k==3) { printf("\n 請輸入要刪除元素的位置i:"); scanf("%d",&i); j=Del_LinkList(H,i); if (j == 1) printf("刪除成功!!"); else printf("刪除失敗!!"); } else if (k==4) //查詢線性表中元素值為x的位置 { printf("\n 請輸入要查詢的序號i:"); scanf("%d",&i); LNode *p; p=Get_LinkList(H,i); if (p!=NULL) { print(H);printf("中序號為i的地址是 %d ",p);} else printf("連結串列中無此序號!!\n"); } else if (k==5) //輸出連結串列 { printf("\n表的儲存順序為:"); print(H); } }while(k!=0); }
說明:1.這個是鄙人大二期間所學,所以模板很多人都用過,如有雷同,不是偶然。 2.發部落格只為了紀念所學所感,於此而已。