数字顺序表
#include<stdio.h>
#include<malloc.h> /* 定义ElemType为int类型 */
typedef int ElemType; #define TRUE 1 #define FALSE 0 #define flag -1 /* 单链表的结点类型 */
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("链表已经清空\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已插入到链表中\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结束\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("链表已经为空,不能删除\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; } } |
|