顺序表上基本运算的实现

2018/03/06 19:20
阅读数 0
  1 /*
  2 程序功能:顺序表上基本运算的实现
  3 1.顺序表L的初始化
  4 2.创建一个顺序表L
  5 3.求顺序表L的长度
  6 4.按序号取顺序表L中的元素
  7 5.在顺序表L中查找元素e的位置
  8 6.在顺序表L中插入新元素
  9 7.在顺序表L中删除元素
 10 8.将线性表中元素输出
 11 9.顺序表应用举例(求顺序表A和B的交集)
 12 @润青 
 13 对于刚学数据结构的同学而言,可能有的同学理解能力比较强一点,加上前期C语言的基础,他们也许不会很长时间困惑于某一个知识点,但由于数据结构并非采用c语言进行讲述
 14 ,而且大多数教材在讲述顺序表基本运算的实现这个知识点时只给出函数的代码,这就给一些同学造成了困惑,主函数的内容需要自己添加,理解难度提升,我认为不利于学习本节
 15 内容,这也困扰了我很长时间,所以,在实现了之后,觉得有必要把内容写下来,希望能帮助到像我一样的初学者。
 16  
 17 */ 
 18 #include<stdio.h>
 19 #include<stdlib.h>
 20 #define MaxSize 100
 21 #define LEN sizeof(SeqList)
 22 typedef int DataType;
 23 typedef struct{
 24     DataType data[MaxSize];
 25     int length;
 26 }SeqList;
 27 SeqList *L;
 28 void InitList(SeqList *L)
 29 {
 30     L->length=0;
 31 }
 32 void CreatList(SeqList *L)
 33 {
 34     int k=0;
 35     DataType x;
 36     scanf("%d",&x);
 37     while(x!=0)
 38     {
 39         L->data[k]=x;
 40         k++;
 41         scanf("%d",&x);
 42     }
 43     L->length=k;
 44 }
 45 int GetLength(SeqList *L)
 46 {
 47     return L->length;
 48 }
 49 DataType GetNode(SeqList *L,int i)
 50 {
 51     if(i<1||i>L->length)
 52     {
 53         printf("不存在该位置的元素!");
 54         return 0; 
 55     }
 56     return L->data[i-1];
 57 }
 58 int LocateList(SeqList *L,DataType e)
 59 {
 60     int i;
 61     i=0;
 62     while(i<L->length&&L->data[i]!=e)
 63       i++;
 64     if(i<L->length)
 65       return i+1;
 66     else
 67       return -1;
 68 }
 69 void InsertList(SeqList *L,int i,DataType x)
 70 {
 71     if(i<1||i>L->length+1)
 72     {
 73         printf("插入位置只能介于1至n+1!"); 
 74         return; 
 75     }
 76     if(L->length==MaxSize)
 77     {
 78         printf("顺序表已满!");
 79         return;
 80     }
 81     for(int j=L->length-1;j>=i-1;j--)
 82       L->data[j+1]=L->data[j];
 83     L->data[i-1]=x;
 84     L->length++;
 85 }
 86 void DeleteList(SeqList *L,int i)
 87 {
 88     if(i<1||i>L->length)
 89     {
 90         printf("position error");
 91         return;
 92     }
 93     for(int j=i;j<=L->length-1;j++)
 94       L->data[j-1]=L->data[j];
 95     L->length--;
 96 }
 97 void PrintList(SeqList *L)
 98 {
 99     int i;
100     printf("顺序表中元素为:\n");
101     for(i=0;i<L->length;i++)
102     printf("%d ",L->data[i]);
103     printf("\n");
104 }
105 void CommElem(SeqList *A,SeqList *B,SeqList *C)
106 {
107     int i,k,j=1;
108     DataType x;
109     InitList(C);
110     for(i=1;i<=GetLength(A);i++)
111     {
112         x=GetNode(A,i);
113         k=LocateList(B,x);
114         if(k>0)
115         {
116             InsertList(C,j,x);
117             j++;
118         }
119     }
120 }
121 int main()
122 {
123     
124     int i,j,x;
125     L=(SeqList*)malloc(sizeof(SeqList));
126     InitList(L);
127     printf("创建一个链表,请输入链表中的元素(以0结束)\n");
128     CreatList(L);
129     GetLength(L);
130     printf("链表的长度为:%d\n",GetLength(L)); 
131     printf("请输入您要查询的结点i: ");
132     scanf("%d",&i);
133     GetNode(L,i);
134     printf("第%d个结点的元素为:%d\n",i,GetNode(L,i));
135     printf("请输入您要查询的元素:");
136     scanf("%d",&j);
137     LocateList(L,j);
138     printf("元素%d位于第%d个结点\n",j,LocateList(L,j)); 
139     printf("请输入您要插入的元素以及位置:");
140     scanf("%d%d",&x,&i);
141     InsertList(L,i,x);
142     PrintList(L); 
143     printf("请输入您要删除的结点:"); 
144     scanf("%d",&i);
145     DeleteList(L,i);
146     PrintList(L); 
147     /*顺序表应用举例 
148     SeqList *A,*B,*C;
149     A=(SeqList*)malloc(sizeof(SeqList));
150     InitList(A);
151     printf("创建一个顺序表A,请输入顺序表A中的元素(以0结束)\n");
152     CreatList(A);
153     B=(SeqList*)malloc(sizeof(SeqList));
154     InitList(B);
155     printf("创建一个顺序表B,请输入顺序表B中的元素(以0结束)\n");
156     CreatList(B);
157     C=(SeqList*)malloc(sizeof(SeqList));
158     CommElem(A,B,C);
159     printf("A,B的交集为:\n");
160     PrintList(C);
161     */
162     return 0;
163 }

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部