數(shù)字順序表
#include<stdio.h>
#include<malloc.h> /* 定義ElemType為int類型 */
typedef int ElemType; #define TRUE 1 #define FALSE 0 #define flag -1 /* 單鏈表的結(jié)點類型 */
typedef struct LNode {ElemType data; struct LNode *next; } LNode,*LinkedList; /* 初始化單鏈表 */
LinkedList LinkedListInit() {LinkedList L; L=(LinkedList)malloc(sizeof(LNode)); L->next=NULL; return L; } /* 清空單鏈表 */
void LinkedListClear(LinkedList L) {L->next=NULL; printf("鏈表已經(jīng)清空\n"); } /* 檢查單鏈表是否為空 */
int LinkedListEmpty(LinkedList L) {if(L->next==NULL) return TRUE; else return FALSE; } /* 遍歷單鏈表 */
void LinkedListTraverse(LinkedList L) {LinkedList p; p=L->next; if(p==NULL) printf("單鏈表為空表\n"); else {printf("鏈表中的元素為:\n"); while(p!=NULL) {printf("%d ",p->data); p=p->next;} } printf("\n"); } /* 求單鏈表長度 */
int LinkedListLength (LinkedList L) {LinkedList p; int j; p=L->next; j=0; while(p!=NULL) { j++;p=p->next; } return j; } /* 從鏈表中查找元素 */
LinkedList LinkedListGet(LinkedList L,int i) {LinkedList p;int j; p=L->next; j=1; while (p!=NULL && j<i ) {p=p->next; j++; } if (j==i) return p; else return NULL; } /* 從鏈表中查找與給定元素值相同的元素在順序表中的位置 */
int LinkedListLocate ( LinkedList L, ElemType x) {LinkedList p;int j; p=L->next; j=1; while ( p!=NULL && p->data != x) {p=p->next;j++;} if(p) return j; else return 0; } /* 向鏈表中插入元素 */
void LinkedListInsert(LinkedList L, int i, ElemType x) {LinkedList p,s; int j; j=1;p=L; while(p&&j<i) {p=p->next;j++;} if(p==NULL||j>i) printf("插入位置不正確\n"); else {s=(LNode *)malloc(sizeof(LNode)); s->data=x; s->next=p->next; p->next=s; printf("%d已插入到鏈表中\(zhòng)n",x); } } /* 從鏈表中刪除元素 */
void LinkedListDel(LinkedList L,int i) { LinkedList p,q; int j; j=1;p=L; while(p->next&&j<i) {p=p->next;j++;} if(p->next==NULL) printf("刪除位置不正確\n"); else {q=p->next;p->next=q->next;free(q); printf("第%d個元素已從鏈表中刪除\n",i); } } /*建立單鏈表*/ LinkedList LinkedListCreat( ) { LinkedList L=LinkedListInit(),p,r; ElemType x; r=L; printf("請依次輸入鏈表中的元素,輸入-1結(jié)束\n"); scanf("%d",&x); while (x!=flag) {p=(LinkedList)malloc(sizeof(LNode)); p->data=x; r->next=p; r=p; scanf("%d",&x); } r->next=NULL; return L; } int scan() {int d; printf("請選擇要進行的操作\n"); printf("1.初始化 2.清空 3.求鏈表長度 4.檢查鏈表是否為空\n"); printf("5.遍歷鏈表 6.從鏈表中查找元素\n"); printf("7.從鏈表中查找與給定元素值相同的元素在順序表中的位置\n"); printf("8.向鏈表中插入元素 9. 從鏈表中刪除元素\n"); printf("10.建立單鏈表\n"); printf("其他鍵退出。。。。。\n"); scanf("%d",&d); return(d); } void main()
{ int quit=0; int i,locate; ElemType e; LinkedList L,p; while(!quit) switch(scan()) {case 1:L=LinkedListInit();printf("\n");break; case 2:LinkedListClear(L);printf("\n");break; case 3:printf("鏈表的長度為 %d\n",LinkedListLength(L));break; case 4:if(LinkedListEmpty(L))printf("鏈表為空\n");else printf("鏈表非空\n");break; case 5:LinkedListTraverse(L); break; case 6:printf("請輸入待查詢元素在鏈表中的位置:"); scanf("%d",&i); p=LinkedListGet(L,i); if(p) printf("鏈表中第%d個元素的值為:%d\n",i,p->data); else printf("查詢位置不正確\n"); break; case 7:printf("請輸入待查詢元素的值:"); scanf("%d",&e); locate=LinkedListLocate(L,e); if(locate) printf("%d在鏈表中的位置是:%d\n",e,locate); else printf("鏈表中沒有值為%d的元素\n",e); break; case 8:printf("請輸入插入元素的位置和值(中間以空格或回車分隔):\n"); scanf("%d%d",&i,&e); LinkedListInsert(L,i,e); break; case 9:if(LinkedListLength(L)==0) printf("鏈表已經(jīng)為空,不能刪除\n"); else {printf("請輸入待刪除元素的位置:\n"); scanf("%d",&i); LinkedListDel(L,i);} break; case 10:L=LinkedListCreat(); printf("\n");break; default:quit=1;} } 字母順序表
#include<stdio.h>
#include<stdlib.h> #define maxsize 100 typedef char elemtype; typedef struct {int listsize; elemtype *elem; int length; }sqlist; /*順序表類型定義*/ void creat_list(sqlist *l,int n) /*1順序表的初始化*/ { int i; l->elem=(char*)malloc(maxsize*sizeof(char)); l->length=0; //初始容量 l->listsize=maxsize; //最大容量 printf("請依次輸入%d個元素",n); for(i=0;i<=n;i++) {scanf("%c",&(l->elem[i])); (l->length)++;} } void printlist(sqlist *l) //輸出順序表元素
{ int i; printf("順序表為:"); for(i=0;i<l->length;i++) printf("%c",l->elem[i]); printf("\n"); } void listdelete(sqlist *l,int i) /*順序表L中刪除第I個元素*/ { int j; for(j=i;j<l->length-1;j++) l->elem[j]=l->elem[j+1]; (l->length)--; } void listinsert(sqlist *l,int i,elemtype e) /*9在順序表L中第I個位置上插入元素E*/
{ int j; (l->length)++; /*順序表長度增1*/ for(j=l->length;j>i;j--) /*將elem[i]及后面元素后移一個位置*/ l->elem[j]=l->elem[j-1]; l->elem[i]=e; } int locateelem(sqlist *l,elemtype e) /*在順序表L中查找元素E*/
{ int i=0; while(i<l->length&&l->elem[i]!=e) i++; if(i>=l->length) return 0; else return i; } int choose()
{int d; printf("請選擇要進行的操作\n"); printf("初始化(1)\n輸出列表(2)\n"); printf("查詢元素(3)\n"); printf("從鏈表中刪除元素(4)\n向鏈表中插入元素(5)\n:"); printf("其他鍵退出\n"); scanf("%d",&d); return(d); } void main() { sqlist l; elemtype e,m; int i,n,p,f; f=0; while(!f) switch(choose()) { case 1:printf("請輸入該順序表的長度(小100):\n"); scanf("%d",&n); creat_list(&l,n); printf("\n");break; case 2:printlist(&l);break; case 3:printf("請輸入要查詢的字母\n"); scanf("%c",&e); e=getchar(); printf("元素的位置%c=%d\n",e,locateelem(&l,e)); break; case 4:printf("請輸入刪除元素的位置:\n");
scanf("%d",&i); listdelete(&l,i); printlist(&l); break; case 5:printf("請輸入要插入位置n和元素m\n");
scanf("%d %c",&n,&m); if(n<1||n>l.length) printf("ERROR"); else if(l.length>=l.listsize) printf("ERROR"); else {listinsert(&l,n,m);printlist(&l);} break; default :f=1; } } |
|